2013-01-18 18 views
6

Mam zestaw danych z kluczem podstawowym, kluczem obcym i pustą wartością sekwencji. Jaki jest najszybszy sposób dodania numeru sekwencyjnego do danych w oparciu o klucz obcy?Jaki jest najszybszy sposób aktualizacji istniejących rekordów za pomocą sekwencji?

QuestionConditionId to mój klucz podstawowy, QuestionId jest kluczem obcym. To, co dane wygląda po wybraniu z zamówieniem przez na QuestionId:

enter image description here

Po aktualizacji moich danych powinien wyglądać następująco:

enter image description here

mógłbym napisać pętlę dla to, ale mam nadzieję na coś mniejszego i bardziej wydajnego. Jakieś pomysły?

+1

jesteś lukcy w serwerze sql, aby mieć 'numer_wiersza': D – bonCodigo

Odpowiedz

9
WITH T 
    AS (SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY QuestionId 
             ORDER BY QuestionConditionId) AS RN 
     FROM YourTable) 
UPDATE T 
SET Sequence = RN 

ale utrzymanie tej kolumny Sequence zsynchronizowane po wkładki, aktualizacje, usuwa może być więcej kłopotów niż to jest warte. Możesz także użyć wartości ROW_NUMBER, aby obliczyć czas SELECT zamiast zapisywać ją.

+1

' + 1' dobrze wiedzieć, że CTE są możliwe do aktualizacji ': D' –

+0

Perfect! Dokładnie to, czego szukałem – Mark

Powiązane problemy