Hallo,
das Ganze ist nicht ganz so einfach, da du erst die jeweilige Nummer ermitteln musst und danach erst die Werte setzen kannst.
Ich würde folgendes Skript ausführen(Für MS SQL 2014 geschrieben):
DECLARE iter CURSOR FOR
SELECT Name AS Name,
ROW_NUMBER() OVER (ORDER BY Name) AS nr
FROM Test --Anpassen
ORDER BY Name
DECLARE @name varchar(50);--Anpassen
DECLARE @nr int;
OPEN iter;
FETCH NEXT FROM iter INTO @name, @nr;
while @@FETCH_STATUS = 0 begin
UPDATE Test --Anpassen
SET Sortierreihenfolge = @nr
WHERE Name = @name;
FETCH NEXT FROM iter INTO @name, @nr;
end;
CLOSE iter;
DEALLOCATE iter;
Du musst nur noch den Tabellenname(hier Test) und den Typ von deinem Feld Name anpassen(hier varchar(50) ).
Folgendes passiert:
Zuerst brauchen wir eine SELECT Anweisung, die dein Ergebnis darstellt:
SELECT Name AS Name,
ROW_NUMBER() OVER (ORDER BY Name) AS nr
FROM Test --Anpassen
ORDER BY Name
Dieses geben wir einem CURSOR, damit wir Zeile für Zeile durchgehen können. Um die Werte auch wirklich zu haben, brauchen wir auch noch zwei Variablen vom gleichen Typ, also @name und @ nr. Nun wird der CURSOR geöffnet und damit die SELECT-Anweisung ausgeführt.
In der while-Schleife aktualisieren wir jeden Eintrag in der echten Tabelle mit der aktuellen Nummer. Dazu stecken wir die Werte einer Zeile in die Variablen und erstellen mit diesen ein UPDATE.
Am Schluss müssen wir den CURSOR schließen und freigeben, da wir ihn nicht speicher wollen.
Mit freundlichen Grüßen
Msches Byte