2013-01-18 7 views
6

Ich habe einen Datensatz mit einem Primärschlüssel, einem Fremdschlüssel und einem leeren Sequenzwert. Was ist der schnellste Weg, eine Sequenznummer basierend auf dem Fremdschlüssel zu den Daten hinzuzufügen?Was ist der schnellste Weg, um bestehende Datensätze mit einer Sequenz zu aktualisieren?

QuestionConditionId ist mein Primärschlüssel, QuestionId ist Fremdschlüssel. Dies ist, was die Daten aussehen, nachdem sie von auf QuestionId mit einem Auftrag der Auswahl:

enter image description here

Nach dem Update meiner Daten sollen wie folgt aussehen:

enter image description here

ich für eine Schleife schreiben konnte das, aber ich hoffe auf etwas kleineres und effizienteres. Irgendwelche Ideen?

+1

Sie sind lukcy in SQL-Server zu haben 'row_number': D – bonCodigo

Antwort

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

Aber halten diese Sequence Spalte synchronisiert nach Einfügungen, Aktualisierungen können Löschungen mehr Mühe, als es wert ist. Sie können auch ROW_NUMBER verwenden, um bei SELECT Zeit zu berechnen, anstatt es zu speichern.

+1

' + 1' gut zu wissen, dass CTE aktualisierbar sind ': D' –

+0

Perfekt! Genau das, was ich gesucht habe – Mark

Verwandte Themen