MSSQL-Kontrollsequenz

Ich brauche eine Methode zum Verwalten von Sequenzen in einer Tabelle. Ich habe eine Tabelle, die von einer Sequenz verwaltet werden muss. Ich muss in der Lage sein, eine Zeile zwischen zwei anderen Zeilen einzufügen. wenn ich eine nummerierte Sequenz von 1 bis 10000 habe, und ich möchte eine Zeile zwischen 100 und 101 insert. Oder ich möchte 99 zwischen 1 und 2 bewegen.

Kann das in SQL verwaltet werden oder muss ich es programmatisch programmieren.

SQL server-Tabellen haben keine implizite Reihenfolge!

Der einzige path, eine Sequenz zu erzwingen, ist eine sortierbare Spalte (oder eine Kombination von Spalten) mit eindeutigen Werten.

Eine Möglichkeit, dies zu erreichen, war, Ihre Zeile nach einem vorhandenen Sortschlüssel zu nummerieren:

  • füge eine Spalte hinzu SortKey BIGINT (nach dem Ausfüllen mit Werten solltest du es auf NOT NULL und einen unique index erstellen)

Dieses voll funktionsfähige Beispiel zeigt Ihnen, wie dies zu tun ist:

 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; 

SQL speichert keine data in einer bestimmten Reihenfolge in der Tabelle, es erscheint einfach so, wenn man data mit einem Index oder einer anderen Abfrage betrachtet. Du musst eine ID-Spalte haben, die du benutzt hast, um die data zu sortieren. Es ist nicht einfach, data zwischen zwei aktuellen Zeilen einzufügen (zB um zwischen 100 und 101 einzutragen, musst du alles neu eingeben.

Eine Möglichkeit, dies zu erreichen, wäre, dass Ihre Sequenz nicht zusammenhängend ist. Das heißt, spezifizieren Sie ein Inkrement auf der Sequenz, um Lücken genug zu lassen, um Ihre verschachtelten Zeilen zu setzen. Wenn der Kurs das nicht perfekt ist, da du deine intra-row Lücken erschöpfen kannst, aber es ist ein Anfang.