Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Primärschlüssel zurücksetzen (int als Identität)

Der maximale Wert für einen Bigint ist 9.223.372.036.854.775.807 . Wenn Sie an einem Tag 8 Ziffern erreicht hätten, würden Sie immer noch 10 Tage brauchen, um das Maximum zu erreichen. Das sind etwa 25 Millionen Jahre.

Angenommen, Sie möchten die Spalte immer noch zurücksetzen, ist die erste Frage, die ich habe:Ist die Reihenfolge der Zeilen wichtig? Das heißt, verlassen Sie sich auf die Tatsache, dass Zeile 1000 vor 1100 steht, um beispielsweise eine chronologische oder anderweitig absolute Ordnung zu erreichen? Wenn nicht, ist es einfach:Spalte löschen und erneut hinzufügen. Puh, neue Werte.

Wenn Sie die Reihenfolge beibehalten müssen, müssen Sie etwas sorgfältiger vorgehen:

  1. Schließen Sie den Tisch ab;
  2. Ändern Sie den Typ, sodass er nicht mehr automatisch erhöht wird;
  3. Erstellen Sie eine neue Spalte. Am besten lassen Sie es vorerst keine Indizes haben, da die Aktualisierung des Index die Einfügungen verlangsamt;
  4. Füllen Sie die Werte in der zweiten mit einer Art Schleife, die einen Zähler erhöht (wie der Rownum-Trick von SQL Server), um die Einfügungen so anzuordnen, dass sie der ursprünglichen Reihenfolge entsprechen;
  5. Ersetzen Sie die alte Spalte durch die neue;
  6. Automatisches Inkrement und Primärschlüsselstatus zurücksetzen.