Reset AutoIncrement in der SQL Server nach dem Löschen
Habe ich gelöscht einige Datensätze aus einer Tabelle in einer SQL Server-Datenbank. Jetzt die ID ' s gehen von 101 bis 1200. Ich möchte die Datensätze löschen wieder, aber ich will die ID ' s zu gehen, wieder auf 102. Gibt es eine Möglichkeit, dies zu tun in SQL Server?
Bitte nicht sagen "Mach es nicht". Ich hasse es, wenn ich Frage, wie etwas zu tun, und alles, was ich bekommen ist nicht. Ja zurücksetzen der Identität kann die Ursache für foreign-key-Problemen, aber nur, wenn Sie nicht wissen, Ihre Datenbank und Programm entsprechend. Es gibt sehr gute Gründe für das zurücksetzen einer Identität, nach einer terminiert löschen - sind Sie als Auditoren. Wirtschaftsprüfer hasse es zu sehen, Lücken, so füllen Sie Sie, tun Sie es in einer kontrollierten Art und Weise und stellen Sie sicher, dass foreign key-Constraints eingehalten werden.
wussten Sie, dass Sie Lücken haben, wenn ein Datensatz legen Sie ein Rollback ist nicht nur zum löschen? Sie können nicht verhindern, dass Lücken mit einem autoincrement und es ist töricht zu versuchen. Ich habe mir für ein audit der Agentur und den zuständigen Rechnungsprüfer können, müssen diese aufgeklärt werden. Weitere, wenn Sie die geeigneten audit-Tabellen, können Sie sehen, was passiert ist, um diese Datensätze. Oder, wenn es sein muss, keine Lücken, die jemals aus rechtlichen Gründen (es gibt ein paar Fälle), dann wird nur ein unfähiger Entwickler verwenden einen autoincrement und die Rechnungsprüfer sind zu Recht verärgert.
wussten Sie, dass Sie Lücken haben, wenn ein Datensatz legen Sie ein Rollback ist nicht nur zum löschen? Sie können nicht verhindern, dass Lücken mit einem autoincrement und es ist töricht zu versuchen. Ich habe mir für ein audit der Agentur und den zuständigen Rechnungsprüfer können, müssen diese aufgeklärt werden. Weitere, wenn Sie die geeigneten audit-Tabellen, können Sie sehen, was passiert ist, um diese Datensätze. Oder, wenn es sein muss, keine Lücken, die jemals aus rechtlichen Gründen (es gibt ein paar Fälle), dann wird nur ein unfähiger Entwickler verwenden einen autoincrement und die Rechnungsprüfer sind zu Recht verärgert.
InformationsquelleAutor jumbojs | 2009-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geben Sie den folgenden Befehl ein, um ein erneutes Seeding mytable zu starten 1:
Lesen der Bücher über die Linie (BOL, SQL-Hilfe). Seien Sie auch vorsichtig, dass Sie nicht über Datensätze höher als die Saat Sie einstellen.
wie wäre es mit einer null?
Eigentlich, um die start-IDs auf 1, müssen Sie mit 0:
DBCC CHECKIDENT (mytable, RESEED, 0)
"Sie DBCC CHECKIDENT ( table_name )" legt die Samen auf der höchsten Identität in der Tabelle, als Sie nicht haben, um "vorsichtig sein"
Nein, Ihre Antwort hat bei mir nicht funktioniert. Es hielt die Inkrementierung auf der höchsten ID hatte es intern gespeichert. Ich hatte explizit "RESEED, 18" in meinem Fall zu bekommen "19" als nächste ID. Ohne es hielt glücklich die Inkrementierung auf "29".
InformationsquelleAutor Robert Wagner
wenn Anzahl=0 dann in die nächste stecken Sie den auto-increment-Feld enthält den Wert 1
wenn Anzahl=101, dann in die nächste stecken Sie den auto-increment-Feld enthält den Wert 102
Einige zusätzliche Informationen... für Sie nützlich sein Kann
Vor der Abgabe auto-Inkrement
number
im obigen Abfrage, müssen Sie sicherstellen, dass Ihre vorhandene Tabelle auto increment-Spalte enthalten die Werte weniger, dienumber
.Den maximalen Wert einer Spalte(column_name) aus einer Tabelle(Tabelle1), können Sie folgende Abfrage
InformationsquelleAutor Fathah Rehman P
halb-idiot-Beweis:
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
Die docs sagen "wenn der aktuelle Identitätswert für die Tabelle kleiner ist als die maximale Identität gespeicherten Wert in der Identitätsspalte'; das gilt nicht für Aufräumen, nachdem die Daten gelöscht werden (re-using id - oft eine schlechte Idee). Überprüft auf SQL 2008
Die beste systematische und automatische Rufannahme. Bravo!
InformationsquelleAutor user423430
Versuchen Sie dies:
Dies ist eine Antwort von MySQL. OP ist zu Fragen, MSSQL.
die Frage ist, über MS SQL Server
InformationsquelleAutor xaa
Löschen und erneutes Seeding alle Tabellen in einer Datenbank.
InformationsquelleAutor BMG
Habe ich es herausgefunden. Es ist:
InformationsquelleAutor jumbojs
Basierend auf der akzeptierten Antwort, für diejenigen, die begegnet ein ähnliches Problem, mit voll-schema Qualifikation:
(
[MyDataBase].[MySchemaName].[MyTable]
)... führt zu einer Fehlermeldung, die Sie brauchen, um im Kontext des DB -Ist, wird der folgende Fehler:
Legen Sie die vollständig qualifizierten Tabellennamen mit single-quotes statt:
InformationsquelleAutor user919426
Mehrere Antworten empfehlen die Verwendung einer Aussage, so etwas wie dieses:
Aber der OP sagte, "einige Datensätze gelöscht", die möglicherweise nicht alle von Ihnen, so dass der Wert 0 ist nicht immer der richtige. Eine andere Antwort vorgeschlagen, die automatische Suche nach den Wert des maximalen Stroms und Nachsaat, aber das läuft in Schwierigkeiten, wenn es keine Datensätze in der Tabelle und somit max() NULL zurück. Ein Kommentar vorgeschlagen, einfach
zurücksetzen, um den Wert, aber einen anderen Kommentar richtig festgestellt, dass diese nur erhöht den Wert auf das maximum bereits in der Tabelle angezeigt; dies wird nicht reduzieren Sie den Wert, wenn es bereits höher als der maximale in der Tabelle, das ist das, was der OP wollte.
Eine bessere Lösung kombiniert diese Ideen. Die ersten CHECKIDENT aus, setzt den Wert auf 0, und die zweite setzt ihn auf den höchsten Wert in der Tabelle, falls es Einträge in der Tabelle:
Als mehrere Kommentare haben darauf hingewiesen, stellen Sie sicher, es gibt keine Fremdschlüssel in anderen Tabellen verweisen auf die gelöschten Datensätze. Ansonsten die Fremdschlüssel verweisen auf Datensätze, die Sie erstellen nach Einsaat der Tabelle, ist sicherlich nicht das, was Sie im Sinn hatte.
InformationsquelleAutor Michael Rodby
Sie nicht wollen, dies zu tun im Allgemeinen. Reseed erstellen können, die die Integrität der Daten Probleme. Es ist wirklich nur für den Einsatz auf Entwicklung von Systemen, in denen Sie wegwischt alle test-Daten und starting over. Es sollte nicht auf einem Produktion system, wenn alle verknüpften Datensätze nicht gelöscht wurden (nicht jede Tabelle sollte in einer foreign key-Beziehung ist!!!). Sie können erstellen ein Chaos zu tun, und vor allem, wenn du meinst, es zu tun auf einer regelmäßigen basis, nach jedem löschen. Es ist eine schlechte Idee, zu befürchten, Lücken in der Sie Identität-Feld-Werte.
InformationsquelleAutor HLGEM
Möchte ich hinzufügen, dass diese Antwort, weil die
DBCC CHECKIDENT
-Ansatz Produkt Probleme bei der Verwendung von schemas für die Tabellen. Verwenden Sie diese, um sicher zu sein:Wenn Sie möchten, um zu überprüfen, den Erfolg der operation, verwenden Sie
sollte die Ausgabe
0
im Beispiel oben.InformationsquelleAutor Alexander Schmidt
Was ist das?
Dies ist eine schnelle und einfache Art und Weise zu ändern, die auto-Inkrement auf 0 oder was auch immer Nummer, die Sie möchten. Ich dachte mir, diese zu exportieren, Datenbank und Lesen den code selbst.
Können Sie auch schreiben, wie diese zu machen, eine single-line-Lösung:
InformationsquelleAutor Victor Resnov