2013-01-18 13 views
6

Ho un set di dati con una chiave primaria, una chiave esterna e un valore di sequenza vuoto. Qual è il modo più veloce di aggiungere un numero di sequenza ai dati in base alla chiave esterna?Qual è il modo più veloce per aggiornare i record esistenti con una sequenza?

QuestionConditionId è la mia chiave primaria, QuestionId è chiave esterna. Questo è ciò che i dati sembra dopo aver selezionato con un ordine per il QuestionId:

enter image description here

Dopo l'aggiornamento dei miei dati dovrebbe essere simile a questo:

enter image description here

potrei scrivere un ciclo per questo, ma spero in qualcosa di più piccolo e più efficiente. Qualche idea?

+1

siete lukcy in sql server per avere 'row_number': D – bonCodigo

risposta

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

Ma mantenere questa colonna Sequence sincronizzato dopo inserimenti, aggiornamenti, eliminazioni possono essere più problemi di quanto vale la pena. È inoltre possibile utilizzare ROW_NUMBER per calcolare al tempo SELECT anziché memorizzarlo.

+1

' + 1' buono sapere che CTE è aggiornabile ': D' –

+0

Perfetto! Esattamente quello che stavo cercando – Mark

Problemi correlati