Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-Datenbank in Microsoft Fabric
Ü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.
Dieser Artikel und die Syntax IDENTITY unterscheiden sich auf verschiedenen Plattformen der SQL Datenbank-Engine. Für Microsoft Fabric Data Warehouse wählen Sie Fabric Data Warehouse in der Versions-Dropdown-Liste aus.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax for SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL Database in Fabric:
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 von Ihnen angegebene Tabelle muss eine Identitätsspalte enthalten. Tabellennamen müssen die Regeln für Bezeichner erfüllen. Verwenden Sie Trennzeichen für zwei- oder dreiteilige Namen, wie Person.AddressType oder [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.
MIT NO_INFOMSGS
Alle Informationsmeldungen werden unterdrückt.
Bemerkungen
Die spezifischen Korrekturen, die am aktuellen Identitätswert vorgenommen werden, DBCC CHECKIDENT hängen von den Parameterspezifikationen ab.
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, setzen Sie den Identitätswert zurück, um mögliche Fehler oder Lücken in der Wertefolge zu vermeiden. |
DBCC CHECKIDENT (<table_name>)oder DBCC CHECKIDENT (<table_name>, RESEED) |
Wenn der aktuelle Identitätswert einer Tabelle kleiner ist als der maximal in der Identitätsspalte gespeicherte maximal gespeicherte Identitätswert, DBCC CHECKIDENT setzt man ihn zurück, indem der Maximalwert in der Identitätsspalte verwendet wird. 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 der Erstellung der Tabelle keine Zeilen in die Tabelle eingefügt wurden oder alle Zeilen durch die Verwendung der Anweisung TRUNCATE TABLE entfernt werden, wird die erste nach dem Ausführen DBCC CHECKIDENT eingefügte Zeile als Identität verwendet new_reseed_value . Wenn Zeilen in der Tabelle vorhanden sind oder alle Zeilen durch die Verwendung der Anweisung DELETE entfernt werden, verwendet new_reseed_value die nächste eingefügte Zeile + den aktuellen Inkrementwert . Wenn eine Transaktion eine Zeile einfügt und später zurückgesetzt wird, verwendet new_reseed_value die nächste eingefügte Zeile + den aktuellen Inkrementwert , als ob die Zeile gelöscht worden wäre. 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:- Wenn eine PRIMARY KEY oder Nebenbedingung UNIQUE in der Identitätsspalte existiert, wird bei späteren Einfügungsoperationen die Fehlermeldung 2627 erzeugt, da der generierte Identitätswert mit bestehenden Werten kollidiert.- Wenn eine PRIMARY KEY oder UNIQUE Nebenbedingung nicht existiert, führen spätere Einfügungsoperationen 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 als DBCC CHECKIDENT (<table_name>, RESEED, <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
Das folgende Beispiel setzt bei Bedarf den aktuellen Identitätswert für die angegebene Tabelle in der Datenbank zurück.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Melden des aktuellen Identitätswerts
Das folgende Beispiel gibt den aktuellen Identitätswert für die angegebene Tabelle in der Datenbank an und korrigiert den Identitätswert nicht, falls er falsch ist.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Erzwingen eines neuen Werts als aktueller Identitätswert
Das folgende Beispiel erhebt den aktuellen Identitätswert für die AddressTypeID Spalte in der Tabelle AddressType auf einen Wert von 10. Da die Tabelle vorhandene Zeilen hat, verwendet die nächste eingefügte Zeile 11 als Wert. Der neue aktuelle Identitätswert, der für die Spalte plus 1 definiert ist, ist der Inkrementwert der Spalte.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D: Zurücksetzen des Identitätswert für eine leere Tabelle
Das folgende Beispiel nimmt eine Tabellenidentität von an und (1, 1) erzwingt den aktuellen Identitätswert der ErrorLogID Spalte in der Tabelle ErrorLog auf einen Wert von 1, nachdem alle Datensätze aus der Tabelle gelöscht wurden. Da die Tabelle keine vorhandenen Zeilen hat, verwendet die nächste eingefügte Zeile 1 als Wert. Der neue aktuelle Identitätswert, ohne den für die Spalte nach TRUNCATE definierten Inkrementwert hinzuzufügen oder den 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
Verwandte Inhalte
Gilt für:Warehouse in Microsoft Fabric
Neu den Identitätswert einer Tabelle in Fabric Data Warehouse. Verwenden DBCC CHECKIDENT Sie nach dem Einfügen expliziter Werte mit zur SET IDENTITY_INSERT Neuausrichtung der Identitätsbereiche und zur Vermeidung von Konflikten mit zukünftigen automatisch generierten Werten.
Dieser Artikel und die Syntax IDENTITY unterscheiden sich auf verschiedenen Plattformen der SQL Datenbank-Engine.
Transact-SQL-Syntaxkonventionen
Syntax
DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )
Argumente
table_name
Der Name der Tabelle, für die der Identitätswert neu eingefügt werden soll. Die Tabelle muss eine Identitätsspalte enthalten. Tabellennamen können den Schemanamen enthalten, wie zum Beispiel 'dbo.DimCustomer' oder '[dbo].[DimCustomer]'.
RESEED
Das Schlüsselwort RESEED ist optional, führt DBCC CHECKIDENT aber immer die Réed-Operation aus. Die Option einzubeziehen oder wegzulassen, führt zum gleichen Ergebnis.
Das RESEED Schlüsselwort weist die Datenbank-Engine an, alle verwendeten und reservierten Identitätsbereiche zu scannen und den nächsten Identitätswert festzulegen, um Konflikte mit bestehenden Werten zu vermeiden. In Fabric Data Warehouse RESEED führt er einen bereichsbewussten Scan über alle verteilten Rechenknoten durch, um den korrekten nächsten Wert zu bestimmen.
Bemerkungen
- In Fabric Data Warehouse ist
RESEEDdas einzige Argument, dasDBCC CHECKIDENTdie Option stützt, die sie immer erfüllt. Das System bestimmt automatisch die richtigen nächsten Identitätswertbereiche basierend auf bestehenden Daten. Du kannst keinen benutzerdefinierten Seed-Wert angeben. - Immer nach dem Einfügen
IDENTITY_INSERTexpliziter Werte ausgeführtDBCC CHECKIDENTwerden. Diese Operation stellt sicher, dass zukünftige automatisch generierte Werte nicht mit manuell eingefügten Werten kollidieren. - In Fabric Data Warehouse wird die Angabe eines benutzerdefinierten Modells
new_reseed_valuenicht unterstützt. Der Versuch, einen Wert anzugeben, liefert folgenden Fehler:Specifying a custom seed in Fabric Data Warehouse is not supported. -
DBCC CHECKIDENTerhält Sperren, die gleichzeitige DML- und DDL-Operationen blockieren können. Um Störungen zu minimieren, führen Sie den Befehl isoliert aus, wenn andere Prozesse die Tabelle nicht aktiv nutzen.
Berechtigungen
Du musst den Tisch besitzen oder eine Erlaubnis für den Tisch haben ALTER .
Beispiele
A. Nach Einfügen von Sentinel-Werten neu ausgesät
Nachdem Sentinel-Werte in einer Dimensionstabelle mit SET IDENTITY_INSERTgefüllt wurden, setze die Identitätsspalte neu ein, um zu verhindern, dass zukünftige automatisch generierte Werte mit manuell eingefügten Werten kollidieren.
-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;
INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
(-2, 'Not Applicable');
SET IDENTITY_INSERT dbo.DimCustomer OFF;
-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);
B. Wiederaussäen nach Massenwanderung
Nach der Migration historischer Daten mit expliziten Identitätswerten wird die Tabelle neu gestaltet, um sicherzustellen, dass neue Zeilen Werte erhalten, die sich nicht mit den migrierten Daten überschneiden.
-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);
-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');
C. Nach COPY INTO mit neu aussäen IDENTITY_INSERT
Nach dem Laden von Daten mit COPY INTO , während IDENTITY_INSERT , ON, setze die Identitätsspalte wieder ein.
COPY INTO Optionen überschreiben jede Session-Level-Einstellung für IDENTITY_INSERT.
COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
FILE_TYPE = 'CSV',
IDENTITY_INSERT = 'ON'
);
-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);
D: Reseed ohne RESEED-Schlüsselwort
Das Schlüsselwort RESEED ist optional, führt DBCC CHECKIDENT aber immer die Réed-Operation aus. Die Option einzubeziehen oder wegzulassen, führt zum gleichen Ergebnis.
-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');
-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);