SQL Server-Tabellen haben keine implizite Reihenfolge!
Die einzige Möglichkeit zum Erzwingen einer Sequenz ist eine sortierbare Spalte (oder eine Kombination von Spalten) mit eindeutigen Werten.
Eine Möglichkeit, dies zu erreichen, war Ihre Reihe nach ein nummerieren bestehenden Sortierschlüssel:
- eine Spalte SortKey BIGINT hinzufügen (nachdem es mit Werten füllen Sie es
NOT NULL
setzen soll und erstellen Sie eine unique index
)
werden Sie diese voll funktionsfähiges Beispiel zeigen, wie dies zu tun:
CREATE TABLE #Dummy(SomeExistingSortField INT, SomeContent VARCHAR(100));
INSERT INTO #Dummy VALUES(3,'insert first'),(1,'insert second'),(2,'insert third');
SELECT * FROM #Dummy;
ALTER TABLE #Dummy ADD SortKey BIGINT;
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT SomeExistingSortField)) * 10 AS nr
,SortKey
FROM #Dummy
)
UPDATE CTE SET SortKey=nr;
SELECT * FROM #Dummy ORDER BY SortKey;
INSERT INTO #Dummy VALUES(99,'between 1 and 2',15);
SELECT * FROM #Dummy ORDER BY SortKey;
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT SortKey)) * 10 AS nr
,SortKey
FROM #Dummy
)
UPDATE CTE SET SortKey=nr;
SELECT * FROM #Dummy ORDER BY SortKey;
GO
DROP TABLE #Dummy;
@ user625079, sorry, du hast recht, ich war mit dieser schnell ... Ich werde meine Antwort in wenigen Minuten bearbeiten ... – Shnugo
Ich habe versucht, diese SELECT Q.RowNumber FROM ( SELECT ROW_NUMBER() OVER (ORDER BY [oldkey]) * 10 AS Zeilennummer FROM Mytable ) AS Q ORDER BY RowNumber und OK. Aber wenn ich i aktualisieren es fügt nur 10 bei jedem neuen seqkey – user625079
Dieses Update bringt 10 in allen seqkey UPDATE mytable SET SeqKey = Q.RowNumber FROM ( SELECT ROW_NUMBER() OVER (ORDER BY OLDKEY) * 10 AS RowNumber FROM mytable ) AS Q – user625079