Ich habe einige Datensätze aus einer Tabelle in einer SQL Server-Datenbank gelöscht. Jetzt gehen die IDs von 101 auf 1200. Ich möchte die Datensätze erneut löschen, aber ich möchte, dass die IDs auf 102 zurückgehen. Gibt es eine Möglichkeit, dies in SQL Server zu tun?
sql-server
auto-increment
delete-row
Jumbojs
quelle
quelle
Antworten:
Geben Sie den folgenden Befehl ein, um mytable neu zu setzen und bei 1 zu beginnen:
Lesen Sie darüber in den Online-Büchern (BOL, SQL-Hilfe). Achten Sie auch darauf, dass Sie keine höheren Datensätze als den von Ihnen festgelegten Startwert haben.
quelle
DBCC CHECKIDENT (mytable, RESEED, 0)
Wenn number = 0 ist, enthält das Feld für die automatische Inkrementierung beim nächsten Einfügen den Wert 1
Wenn number = 101, enthält das Auto-Inkrement-Feld beim nächsten Einfügen den Wert 102
Einige zusätzliche Informationen ... Kann für Sie nützlich sein
Bevor Sie
number
in der obigen Abfrage die automatische Inkrementierung angeben, müssen Sie sicherstellen, dass die Spalte für die automatische Inkrementierung Ihrer vorhandenen Tabelle Werte enthält, die kleiner sind als diesenumber
.Um den Maximalwert einer Spalte (Spaltenname) aus einer Tabelle (Tabelle 1) abzurufen, können Sie die folgende Abfrage verwenden
quelle
halb idiotensicher:
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
quelle
Wenn Sie MySQL verwenden, versuchen Sie Folgendes:
quelle
Löschen Sie alle Tabellen in einer Datenbank und setzen Sie sie erneut ein.
quelle
Ich habe es herausgefunden. Es ist:
quelle
Basierend auf der akzeptierten Antwort für diejenigen, die auf ein ähnliches Problem gestoßen sind, mit vollständiger Schemaqualifikation:
(
[MyDataBase].[MySchemaName].[MyTable]
) ... führt zu einem Fehler, Sie müssen sich im Kontext dieser Datenbank befindenDas heißt, Folgendes wird einen Fehler auslösen:
Schließen Sie stattdessen den vollständig qualifizierten Tabellennamen in einfache Anführungszeichen ein:
quelle
In mehreren Antworten wird empfohlen, eine Aussage wie die folgende zu verwenden:
Aber das OP sagte "löschte einige Datensätze", die möglicherweise nicht alle sind, so dass ein Wert von 0 nicht immer der richtige ist. In einer anderen Antwort wurde vorgeschlagen, den maximalen aktuellen Wert automatisch zu ermitteln und auf diesen Wert zurückzusetzen. Dies führt jedoch zu Problemen, wenn die Tabelle keine Datensätze enthält, und daher gibt max () NULL zurück. Ein Kommentar schlug vor, einfach zu verwenden
um den Wert zurückzusetzen, aber ein anderer Kommentar gab korrekt an, dass dies den Wert nur auf das Maximum erhöht, das bereits in der Tabelle enthalten ist; Dies verringert den Wert nicht, wenn er bereits höher als das Maximum in der Tabelle ist, was das OP tun wollte.
Eine bessere Lösung kombiniert diese Ideen. Der erste CHECKIDENT setzt den Wert auf 0 zurück und der zweite setzt ihn auf den höchsten aktuell in der Tabelle enthaltenen Wert zurück, falls Datensätze in der Tabelle vorhanden sind:
Stellen Sie, wie in mehreren Kommentaren angegeben, sicher, dass in anderen Tabellen keine Fremdschlüssel vorhanden sind, die auf die gelöschten Datensätze verweisen. Andernfalls verweisen diese Fremdschlüssel auf Datensätze, die Sie nach dem erneuten Einfügen der Tabelle erstellt haben. Dies ist mit ziemlicher Sicherheit nicht das, was Sie sich vorgestellt haben.
quelle
Ich möchte diese Antwort hinzufügen, da der
DBCC CHECKIDENT
Ansatz Probleme verursacht, wenn Sie Schemas für Tabellen verwenden. Verwenden Sie dies, um sicherzugehen:Wenn Sie den Erfolg des Vorgangs überprüfen möchten, verwenden Sie
welches
0
im obigen Beispiel ausgegeben werden sollte .quelle
Sie möchten dies im Allgemeinen nicht tun. Reseed kann zu Datenintegritätsproblemen führen. Es ist wirklich nur für die Verwendung auf Entwicklungssystemen vorgesehen, auf denen Sie alle Testdaten löschen und von vorne beginnen. Es sollte nicht in einem Produktionssystem verwendet werden, falls nicht alle zugehörigen Datensätze gelöscht wurden (nicht jede Tabelle, die in einer Fremdschlüsselbeziehung stehen sollte, ist!). Sie können dabei ein Durcheinander verursachen, insbesondere wenn Sie dies nach jedem Löschen regelmäßig tun möchten. Es ist eine schlechte Idee, sich über Lücken in Ihren Identitätsfeldwerten Gedanken zu machen.
quelle
Was ist damit?
Dies ist eine schnelle und einfache Möglichkeit, das automatische Inkrement auf 0 oder eine beliebige Zahl zu ändern. Ich habe das herausgefunden, indem ich eine Datenbank exportiert und den Code selbst gelesen habe.
Sie können es auch so schreiben, um es zu einer einzeiligen Lösung zu machen:
quelle