DBCC CHECKIDENT (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics
Überprüft den aktuellen Identitätswert für die angegebene Tabelle in SQL Server und ändert bei Bedarf den Identitätswert. Sie können DBCC CHECKIDENT
auch verwenden, um manuell einen neuen aktuellen Identitätswert für die Identitätsspalte festzulegen.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax für SQL Server und Azure SQL-Datenbank:
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
Syntax für Azure Synapse Analytics:
DBCC CHECKIDENT
(
table_name
[ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
Argumente
table_name
Der Name der Tabelle, deren aktueller Identitätswert überprüft werden soll. Die angegebene Tabelle muss eine Identitätsspalte enthalten. Tabellennamen müssen die Regeln für Bezeichner erfüllen. Zwei- oder dreiteilige Namen müssen mit Trennzeichen versehen werden, z. B. Person.AddressType
or [Person].[AddressType]
.
NORESEED
Gibt an, dass der aktuelle Identitätswert nicht geändert werden soll.
RESEED
Gibt an, dass der aktuelle Identitätswert geändert werden soll.
new_reseed_value
Der neue Wert, der als aktueller Wert der Identitätsspalte verwendet werden soll.
WITH NO_INFOMSGS
Alle Informationsmeldungen werden unterdrückt.
Bemerkungen
Die spezifischen Korrekturen, die am aktuellen Identitätswert vorgenommen werden, sind abhängig von den Parameterangaben.
DBCC CHECKIDENT-Befehl | Durchgeführte Identitätskorrekturen |
---|---|
DBCC CHECKIDENT (<table_name>, NORESEED) |
Der aktuelle Identitätswert wird nicht zurückgesetzt. DBCC CHECKIDENT gibt den aktuellen Identitätswert und den aktuellen Höchstwert der Identitätsspalte zurück. Wenn die beiden Werte nicht gleich sind, sollten Sie den Identitätswert zurücksetzen, um mögliche Fehler oder Lücken in der Wertesequenz zu vermeiden. |
DBCC CHECKIDENT (<table_name>) oder DBCC CHECKIDENT (<table_name>, RESEED) |
Wenn der aktuelle Identitätswert für eine Tabelle kleiner ist als der maximale in der Identitätsspalte gespeicherte Identitätswert, wird er auf den maximalen Wert in der Identitätsspalte zurückgesetzt. Weitere Informationen finden Sie im Abschnitt Ausnahmen weiter unten. |
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) |
Der aktuelle Identitätswert wird auf new_reseed_value festgelegt. Wenn seit dem Erstellen der Tabelle keine Zeilen eingefügt wurden, oder wenn alle Zeilen mit der Anweisung TRUNCATE TABLE entfernt wurden, wird für die erste Zeile, die nach dem Ausführen von DBCC CHECKIDENT eingefügt wird, new_reseed_value als Identität verwendet. Wenn es in der Tabelle Zeilen gibt, oder wenn alle Zeilen mithilfe der DELETE-Anweisung entfernt wurden, verwendet die Zeile, die als Nächstes eingefügt wird, new_reseed_value und den aktuellen inkrementellen Wert. Wenn durch eine Transaktion eine Zeile eingefügt und später ein Rollback ausgeführt wird, werden für die nächste eingefügte Zeile new_reseed_value und der aktuelle inkrementelle Wert verwendet, als ob die Zeile gelöscht wurde. Bei einer nicht leeren Tabelle kann das Festlegen des Identitätswertes auf eine Zahl, die kleiner ist als der maximale Wert in der Identitätsspalte, zu einer der folgenden Bedingungen führen:– Ist eine PRIMARY KEY- oder UNIQUE-Einschränkung für die Identitätsspalte vorhanden, wird bei späteren Einfügevorgängen in die Tabelle die Fehlermeldung 2627 generiert, da ein Konflikt zwischen dem generierten Identitätswert und den vorhandenen Werten besteht. – Ist keine PRIMARY KEY- oder UNIQUE-Einschränkung vorhanden, führen spätere Einfügevorgänge zu doppelten Identitätswerten. |
Ausnahmen
In der folgenden Tabelle sind Bedingungen aufgeführt, unter denen DBCC CHECKIDENT
den aktuellen Identitätswert nicht automatisch zurücksetzt. Außerdem werden Methoden für das Zurücksetzen des Werts bereitgestellt.
Bedingung | Methoden zum Zurücksetzen |
---|---|
Der aktuelle Identitätswert ist größer als der maximale Wert in der Tabelle. | Führen Sie DBCC CHECKIDENT (<table_name>, NORESEED) aus, um den aktuellen Höchstwert in der Spalte zu ermitteln. Geben Sie als Nächstes diesen Wert im Befehl DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) als new_reseed_value an.oder Führen Sie DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) mit new_reseed_value aus, um einen niedrigen Wert festzulegen, und führen Sie dann DBCC CHECKIDENT (<table_name>, RESEED) aus, um den Wert zu korrigieren. |
Alle Zeilen werden aus der Tabelle gelöscht. | Führen Sie DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) mit new_reseed_value aus, um den neuen Startwert festzulegen. |
Ändern des Ausgangswerts
Der Ausgangswert ist der Wert, der für die erste in die Tabelle geladene Zeile in eine Identitätsspalte eingefügt wird. Alle nachfolgenden Zeilen enthalten den aktuellen Identitätswert zuzüglich des inkrementellen Werts, wobei der aktuelle Identitätswert der letzte Identitätswert ist, der für die Tabelle oder Sicht generiert wurde.
DBCC CHECKIDENT
können Sie für die folgenden Aufgaben nicht verwenden:
Ändern des ursprünglichen Ausgangswerts, der für eine Identitätsspalte angegeben wurde, als die Tabelle oder die Sicht erstellt wurde.
Zuweisen von neuen Ausgangswerten zu vorhandenen Zeilen in einer Tabelle oder Sicht.
Um den ursprünglichen Ausgangswert zu ändern und vorhandenen Zeilen neue Ausgangswerte zuzuweisen, müssen Sie die Identitätsspalte löschen und sie unter Angabe des neuen Ausgangswerts neu erstellen. Wenn die Tabelle Daten enthält, werden die ID-Nummern zu den vorhandenen Zeilen mit den angegebenen Ausgangswerten und inkrementellen Werten hinzugefügt. Die Reihenfolge, in der die Zeilen aktualisiert werden, ist nicht sichergestellt.
Resultsets
Unabhängig davon, ob Sie eine der Optionen für eine Tabelle festlegen, die eine Identitätsspalte beinhaltet, gibt DBCC CHECKIDENT
für alle Vorgänge (außer einem Vorgang) die folgende Meldung zurück. Dieser Vorgang gibt einen neuen Ausgangswert an.
Überprüfen der Identitätsinformationen: Aktueller Identitätswert '<aktueller Identitätswert>', Aktueller Spaltenwert '<aktueller Spaltenwert>'. Die DBCC-Ausführung wurde abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich an den Systemadministrator.
Bei Verwendung von DBCC CHECKIDENT
zum Angeben eines neuen Ausgangswerts mithilfe von RESEED <new_reseed_value>
wird folgende Meldung zurückgegeben.
Überprüfen der Identitätsinformationen: Aktueller Identitätswert '<aktueller Identitätswert>'. Die DBCC-Ausführung wurde abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich an den Systemadministrator.
Berechtigungen
Bei dem Aufrufer muss es sich um den Besitzer des Schemas, das die Tabelle enthält, oder um ein Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin handeln.
Azure Synapse Analytics erfordert db_owner-Berechtigungen.
Beispiele
A. Zurücksetzen des aktuellen Identitätswerts bei Bedarf
Im folgenden Beispiel wird, falls erforderlich, der aktuelle Identitätswert der angegebenen Tabelle in der AdventureWorks2022
-Datenbank zurückgesetzt.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Melden des aktuellen Identitätswerts
Im folgenden Beispiel wird der aktuelle Identitätswert in der angegebenen Tabelle der AdventureWorks2022
-Datenbank angezeigt. Ein fehlerhafter Identitätswert wird jedoch nicht korrigiert.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Erzwingen eines neuen Werts als aktueller Identitätswert
Im folgenden Beispiel wird der aktuelle Identitätswert in der Spalte AddressTypeID
in der Tabelle AddressType
auf den Wert 10 festgelegt. Da die Tabelle bereits Zeilen enthält, wird für die nächste eingefügte Zeile der Wert 11 verwendet. Der neue für die Spalte definierte Identitätswert lautet plus 1 (Inkrementwert der Spalte).
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D: Zurücksetzen des Identitätswert für eine leere Tabelle
Im folgenden Beispiel wird eine Tabellenidentität von ErrorLog
angenommen, und für den aktuellen Identitätswert in der Spalte (1, 1)
in der Tabelle ErrorLogID
wird der Wert 1 erzwungen, nachdem alle Datensätze aus der Tabelle gelöscht wurden. Da die Tabelle keine Zeilen enthält, verwendet die nächste eingefügte Zeile den Wert 1, d. h. den neuen aktuellen Identitätswert ohne zusätzlichen Inkrementwert, der nach TRUNCATE für die Spalte definiert wird, und ohne zusätzlichen Inkrementwert nach DELETE.
USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO