Ich habe eine Tabelle mit einer IDENTITY-Spalte. Während der Entwicklung lösche ich die Zeilen von Zeit zu Zeit und füge sie erneut hinzu. Aber die IDENTITY-Werte stiegen immer weiter an und begannen nicht bei 1, als ich sie erneut hinzufügte. Jetzt geht meine ID von 68 -> 92 und dies bringt meinen Code zum Absturz.
Wie setze ich den IDENTITY-Wert zurück?
Antworten:
Sie können den Identitätswert mit zurücksetzen
Wenn Sie also das nächste Mal in TableName einfügen, wird der Identitätswert 1 sein.
Wenn Sie Zeilen aus der Tabelle löschen , wird der Identitätswert nicht zurückgesetzt, sondern ständig erhöht. Genau wie in deinem Fall.
Wenn Sie die Tabelle jetzt abschneiden , wird der Identitätswert auf den ursprünglichen Seed-Wert der Tabelle zurückgesetzt.
Unter SQL-SERVER - LÖSCHEN, TRUNCIEREN und RESEED-Identität finden Sie ein detailliertes Beispiel und eine gute Erläuterung des Unterschieds zwischen Abschneiden und Löschen
quelle
Kin hat Ihnen gezeigt, wie Sie den IDENTITY-Wert zurücksetzen können. Warum müssen Sie das tun, wenn Sie wirklich alle Daten von einer Entwicklungsumgebung entfernen ?
Ich hoffe, dass Sie nicht beabsichtigen, eine zusammenhängende Folge von IDENTITY-Werten beizubehalten, wenn Sie in der Produktion sind. Und ich hoffe, Sie schreiben nicht wirklich Ihren Code, um die IDENTITY-Werte fest zu codieren. Wenn dies aussagekräftige ID-Werte sind, sollten Sie die Verwendung der IDENTITY-Eigenschaft beenden.
Es gibt einige Dinge, die dies verhindern:
der erst behoben wird, wenn SQL Server 2014nicht behoben wird (es sei denn, Sie verwenden ein undokumentiertes und sehr teures Ablaufverfolgungsflag). Bei einem Neustart werden anscheinend bis zu 1000 Werte aus Ihrer IDENTITY-Spalte gelöscht . Der Fehler in Connect lässt darauf schließen, dass dies auf Failover-Ereignisse beschränkt ist, an denen Verfügbarkeitsgruppen beteiligt sind.Kurz gesagt, wenn Sie sich für Lücken interessieren oder diesen Werten eine bestimmte Bedeutung geben möchten, verwenden Sie IDENTITY nicht mehr. Löschen Sie die Tabelle und erstellen Sie sie neu. Wenn Sie die Werte löschen und neu auffüllen müssen, führen Sie entweder eine Aktualisierung oder eine Einfügung mit fest codierten Werten für diese Spalte durch.
Abgesehen davon sind Primärschlüssel und Identität nicht dasselbe. Eine Identitätsspalte ist kein Primärschlüssel, es sei denn, Sie definieren sie ausdrücklich als solche, und Sie können mit Sicherheit einen Primärschlüssel haben, der keine Identitätsspalte ist.
quelle
Wenn Sie nur die letzten Zeilen entfernen müssen, die nicht dem inkrementellen Wert eines Identitätsfelds gefolgt sind, gibt es eine einfache und sichere Möglichkeit:
und du bist fertig.
quelle