DBCC CHECKIDENT (Transact-SQL)

Überprüft den aktuellen Identitätswert der angegebenen Tabelle in SQL Server 2008 R2 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. Informationen finden Sie im nachfolgenden Ausnahmenabschnitt.

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 mittels der Anweisung TRUNCATE TABLE entfernt wurden, wird für diie erste Zeile, die nach dem Ausführen von DBCC CHECKIDENT eingefügt wird, new_reseed_value als Identität verwendet. 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

Der Aufrufer muss Besitzer der Tabelle bzw. Mitglied der festen Serverrolle sysadmin, der festen Datenbankrolle db_owner oder der festen Datenbankrolle db_ddladmin sein.

Beispiele

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

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

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType");
GO

B. Anzeigen des aktuellen Identitätswertes

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

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", NORESEED);
GO

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

Im folgenden Beispiel wird der aktuelle Identitätswert in der Spalte AddressTypeID in der Tabelle AddressType auf den Wert 10 festgelegt. Da die Tabelle vorhandene Zeilen hat, verwendet die nächste eingefügte Zeile 11 als Wert; das heißt, den aktuellem Identitätswert plus 1, dem aktuellen, für die Spalte definierten Inkrementwert.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", RESEED, 10);
GO