Erstellen und Ändern von Bezeichnerspalten

Sie können eine Bezeichnerspalte verwenden, um in einer Tabelle eine automatisch inkrementelle ID zu erstellen. Sie erstellen nur jeweils eine Bezeichnerspalte und eine GUID-Spalte für jede Tabelle.

IDENTITY-Eigenschaft

Bezeichnerspalten können mithilfe der IDENTITY-Eigenschaft implementiert werden. Diese ermöglichen es dem Anwendungsentwickler, sowohl eine ID-Nummer für die erste Zeile, die in die Tabelle eingefügt wird (Identity Seed-Eigenschaft), als auch eine Schrittweite (Identity Increment-Eigenschaft) anzugeben, die zum Ausgangswert addiert wird, um nachfolgende ID-Nummern festzulegen. Wenn Werte in eine Tabelle mit einer Bezeichnerspalte eingefügt werden, generiert Database Engine (Datenbankmodul) automatisch den nächsten Identitätswert, indem die Schrittweite zum Ausgangswert addiert wird. Wenn Sie vorhandenen Tabellen Bezeichnerspalten hinzufügen, werden die ID-Nummern den vorhandenen Zeilen der Tabelle hinzugefügt, wobei die Ausgangswerte und die Werte für die Schrittweite in der Reihenfolge angewendet werden, in der diese Zeilen ursprünglich hinzugefügt wurden. ID-Nummern werden auch für alle Zeilen generiert, die neu hinzugefügt werden. Es ist nicht möglich, einer vorhandenen Tabellenspalte die IDENTITY-Eigenschaft hinzuzufügen.

Wenn Sie die IDENTITY-Eigenschaft zum Definieren einer Bezeichnerspalte verwenden, sollten Sie Folgendes berücksichtigen:

  • Eine Tabelle kann nur über eine Spalte verfügen, die mit der IDENTITY-Eigenschaft definiert wird. Diese Spalte muss mit einem der Datentypen decimal, int, numeric, smallint, bigint oder tinyint definiert werden.

  • Der Ausgangswert und die Schrittweite können angegeben werden. Der Standardwert ist in beiden Fällen 1.

  • Die Bezeichnerspalte darf keine NULL-Werte zulassen und darf weder eine DEFAULT-Definition noch ein DEFAULT-Objekt enthalten.

  • Nachdem die IDENTITY-Eigenschaft festgelegt wurde, kann mithilfe des $IDENTITY-Schlüsselwortes in einer Auswahlliste auf die Spalte verwiesen werden. Auf die Spalte kann auch über den Namen verwiesen werden.

  • Mithilfe der OBJECTPROPERTY-Funktion können Sie ermitteln, ob eine Tabelle über eine IDENTITY-Spalte verfügt; mithilfe der COLUMNPROPERTY-Funktion können Sie den Namen der IDENTITY-Spalte ermitteln.

  • SET IDENTITY_INSERT kann zum Deaktivieren der IDENTITY-Eigenschaft einer Spalte durch Aktivieren von Werten, die explizit eingefügt werden sollen, verwendet werden.

    HinweisHinweis

    Werden in einer Tabelle mit einer Bezeichnerspalte häufig Daten gelöscht, können Lücken zwischen einzelnen Identitätswerten auftreten. Gelöschte Identitätswerte werden nicht erneut verwendet. Um solche Lücken zu vermeiden, sollten Sie die IDENTITY-Eigenschaft nicht verwenden. Sie können stattdessen einen Trigger erstellen, der basierend auf den vorhandenen Werten in der Bezeichnerspalte einen neuen Identitätswert bestimmt, wenn Zeilen eingefügt werden.

Global eindeutige Bezeichner

Obwohl die IDENTITY-Eigenschaft die Zeilennummerierung innerhalb einer Tabelle automatisiert, können für getrennte Tabellen, von denen jede über eine eigene Bezeichnerspalte verfügt, dieselben Werte generiert werden. Dies liegt daran, dass die Eindeutigkeit der IDENTITY-Eigenschaft nur für die Tabelle garantiert wird, für die sie verwendet wird. Wenn eine Anwendung eine Bezeichnerspalte generieren muss, die übergreifend für eine Datenbank oder sogar datenbankübergreifend für alle vernetzten Computer weltweit eindeutig ist, verwenden Sie den uniqueidentifier-Datentyp und die NEWID- oder die NEWSEQUENTIALID()-Funktion. Außerdem können Sie die ROWGUIDCOL-Eigenschaft anwenden, um anzugeben, dass die neue Spalte eine Spalte mit Zeilen-GUIDs ist. Anders als bei Spalten mit der IDENTITY-Eigenschaft generiert Database Engine (Datenbankmodul) für Spalten mit dem uniqueidentifier-Datentyp nicht automatisch Werte. Erstellen Sie zum Einfügen eines global eindeutigen Wertes eine DEFAULT-Definition für die Spalte, die die NEWID- oder NEWSEQUENTIALID-Funktion verwendet, um einen global eindeutigen Wert zu generieren. Weitere Informationen finden Sie unter Verwenden von uniqueidentifier-Daten.

Auf eine Spalte mit der ROWGUIDCOL-Eigenschaft kann mit dem $ROWGUID-Schlüsselwort in einer Auswahlliste verwiesen werden. Dies entspricht dem Verfahren zum Verweisen auf eine IDENTITY-Spalte mithilfe des $IDENTITY-Schlüsselwortes. Eine Tabelle kann nur über eine Spalte verfügen, die mit der ROWGUIDCOL-Eigenschaft definiert wird, und diese Spalte muss mithilfe des uniqueidentifier-Datentyps definiert werden. Mithilfe der OBJECTPROPERTY (Transact-SQL)-Funktion können Sie ermitteln, ob eine Tabelle über eine ROWGUIDCOL-Spalte verfügt; mithilfe der COLUMNPROPERTY (Transact-SQL)-Funktion können Sie den Namen der ROWGUIDCOL-Spalte ermitteln.

Im folgenden Beispiel wird eine Tabelle mit einer uniqueidentifier-Spalte als Primärschlüssel erstellt. Im Beispiel wird die NEWSEQUENTIALID()-Funktion in der DEFAULT-Einschränkung zum Bereitstellen von Werten für neue Zeilen verwendet. Die ROWGUIDCOL-Eigenschaft wird auf die uniqueidentifier-Spalte angewendet, sodass mithilfe des $ROWGUID-Schlüsselworts auf sie verwiesen werden kann.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

So erstellen Sie eine neue Bezeichnerspalte, wenn Sie eine Tabelle erstellen

CREATE TABLE (Transact-SQL)

So erstellen Sie eine neue Bezeichnerspalte für eine vorhandene Tabelle

ALTER TABLE (Transact-SQL)

So löschen Sie eine Bezeichnerspalte

ALTER TABLE (Transact-SQL)

Vorgehensweise: Löschen von Spalten aus einer Tabelle (Visual Database Tools)

So rufen Sie Informationen zu Identitätsspalten ab

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

So überprüfen und korrigieren Sie den Identitätswert für eine angegebene Tabelle

DBCC CHECKIDENT (Transact-SQL)

So legen Sie einen neuen Ausgangswert fest

DBCC CHECKIDENT (Transact-SQL)