DBCC CHECKIDENT (Transact-SQL)

Überprüft den aktuellen Identitätswert der angegebenen Tabelle und korrigiert ihn gegebenenfalls. Sie können DBCC CHECKIDENT auch verwenden, um manuell einen neuen aktuellen Identitätswert für die Identitätsspalte festzulegen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

DBCC CHECKIDENT 
( 
        table_name
        [ , { NORESEED | { 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 den Regeln für Bezeichner entsprechen.

  • 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.

Hinweise

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 maximalen Wert 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.

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

Der aktuelle Identitätswert wird auf new_reseed_value festgelegt. Wenn seit Erstellen der Tabelle keine Zeilen eingefügt wurden oder wenn alle Zeilen mithilfe der TRUNCATE TABLE-Anweisung entfernt wurden, verwendet die erste Spalte, die nach Ausführung von DBCC CHECKIDENT eingefügt wird, new_reseed_value als Identität. Andernfalls wird für die nächste eingefügte Zeile new_reseed_value + aktuelles Inkrement verwendet.

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 UNIQUE-Einschränkung für die Identitätsspalte vorhanden ist, wird bei späteren Einfügungsvorgängen in die Tabelle die Fehlermeldung 2627 generiert, da ein Konflikt zwischen dem generierten Identitätswert und vorhandenen Werten besteht.

  • Ist keine PRIMARY KEY- oder UNIQUE-Einschränkung vorhanden, führen spätere Einfügungsvorgä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 Wertes 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 maximalen Wert in der Spalte zu bestimmen, und geben Sie anschließend diesen Wert für new_reseed_value im Befehl DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) an.

Oder

  • Führen Sie DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) aus, wobei new_reseed_value auf einen sehr kleinen Wert festgelegt wird, und führen Sie anschließend 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) aus, wobei new_reseed_value auf den gewünschten Anfangswert festgelegt wird.

Ä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. Weitere Informationen finden Sie unter Erstellen und Ändern von Bezeichnerspalten.

Mit DBCC CHECKIDENT können Sie folgende Aufgaben nicht ausführen:

  • Ä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 eine der Optionen für eine Tabelle, die eine Identitätsspalte enthält, angegeben wird, gibt DBCC CHECKIDENT Folgendes zurück (die Werte können variieren):

Checking identity information: current identity value '290', current column value '290'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Berechtigungen

Bei dem Aufrufer muss es sich um den Besitzer der Tabelle oder um ein Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin handeln.

Beispiele

A. Zurücksetzen des aktuellen Identitätswertes, sofern dies erforderlich ist

Im folgenden Beispiel wird, falls erforderlich, der aktuelle Identitätswert der Tabelle Employee in der AdventureWorks-Datenbank zurückgesetzt.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

B. Anzeigen des aktuellen Identitätswertes

Im folgenden Beispiel wird der aktuelle Identitätswert in der Tabelle Employee der AdventureWorks-Datenbank angezeigt. Ein fehlerhafter Identitätswert wird jedoch nicht korrigiert.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

C. Festlegen des aktuellen Identitätswertes auf einen neuen Wert

Im folgenden Beispiel wird der aktuelle Identitätswert in der EmployeeID-Spalte in der Employee-Tabelle auf einen Wert von 300 festgelegt. Da die Tabelle bereits Zeilen enthält, wird für die nächste eingefügte Zeile der Wert 301 verwendet (der aktuelle Identitätswert plus 1), d. h. der aktuelle, für die Spalte definierte inkrementelle Wert.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 300);
GO