Wenn Sie T-SQL zum Erstellen (oder Ändern) einer Tabelle in SQL Server verwenden, haben Sie die Möglichkeit, IDENTITY()
zu verwenden -Eigenschaft zum Erstellen einer Identitätsspalte.
Eine Identitätsspalte enthält eine automatisch inkrementierende Identifikationsnummer. Die IDENTITY()
Eigenschaft kann mit CREATE TABLE
verwendet werden und ALTER TABLE
Aussagen.
Syntax
Die Syntax lautet wie folgt:
IDENTITY [ (seed , increment) ]
Der Seed ist der Wert, der für die allererste in die Tabelle geladene Zeile verwendet wird.
Das Inkrement ist der inkrementelle Wert, der zum Identitätswert der vorherigen geladenen Zeile hinzugefügt wird.
Sie müssen beide Argumente oder keines angeben. Wenn Sie nichts angeben, ist der Standardwert (1,1)
.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel zur Veranschaulichung.
CREATE TABLE Pets ( PetId int IDENTITY(1,1) PRIMARY KEY, PetName varchar(255) );
Dieser Code erstellt eine Tabelle mit zwei Spalten. Die erste Spalte (PetId
) ist eine Identitätsspalte, da ich IDENTITY()
verwende Eigentum in seiner Definition.
Nachdem ich nun eine Identitätsspalte erstellt habe, kann ich Haustiernamen in PetName
einfügen Spalte, ohne dass für jede Zeile eine ID angegeben werden muss.
INSERT INTO Pets (PetName) VALUES ('Homer'), ('Felix'), ('Ruff'); SELECT * FROM Pet;
Ergebnis:
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | +---------+-----------+
Beispiel 2 – Unterschiedlicher Startwert und Inkrement
Hier ist ein Beispiel, das einen anderen Startwert und ein anderes Inkrement verwendet.
In diesem Fall beginnt der Seed bei 150 und wird für jede Zeile um 10 erhöht.
CREATE TABLE Cities ( CityId int IDENTITY(150, 10) PRIMARY KEY, CityName varchar(255) );
Fügen Sie nun einige Daten ein und wählen Sie sie aus:
INSERT INTO Cities (CityName) VALUES ('Auckland'), ('Danang'), ('Khon Kaen'); SELECT * FROM Cities;
Ergebnis:
+----------+------------+ | CityId | CityName | |----------+------------| | 150 | Auckland | | 160 | Danang | | 170 | Khon Kaen | +----------+------------+
Beispiel 3 – Falsche Verwendung
Wie bereits erwähnt, müssen Sie beide Argumente angeben oder keines. Mit anderen Worten, Sie können nicht nur ein Argument liefern. Hier ist ein Beispiel dafür, was passiert, wenn Sie nur ein Argument angeben.
CREATE TABLE Cities ( CityId int IDENTITY(1) PRIMARY KEY, CityName varchar(255) );
Ergebnis:
Msg 102, Level 15, State 1, Line 2 Incorrect syntax near ')'.
Beispiel 4 – Versuch, die Identitätswerte zu überschreiben
Wenn Sie versuchen, die automatischen Identitätswerte zu überschreiben, erhalten Sie möglicherweise eine Fehlermeldung wie diese.
INSERT INTO Cities (CityId, CityName) VALUES (123, 'Bangkok');
Ergebnis:
Msg 544, Level 16, State 1, Line 1 Cannot insert explicit value for identity column in table 'Cities' when IDENTITY_INSERT is set to OFF.
Dies liegt daran, dass Sie versuchen, die von IDENTITY()
erstellten Werte zu überschreiben Eigentum. In vielen Fällen kann es sein, dass Sie einfach nicht wussten, dass es sich um eine Identitätsspalte handelt. In solchen Fällen müssen Sie lediglich die Identitätsspalte aus Ihrem INSERT
entfernen Aussage.
Allerdings, wenn Sie es wirklich tun müssen IDENTITY()
überschreiben -Eigenschaft finden Sie unter Einfügen von Werten in eine IDENTITY-Spalte in SQL Server.
Wie bereits erwähnt, können Sie diese Spalte einfach aus Ihrem INSERT
entfernen, wenn Sie die Identitätswerte nicht überschreiben müssen Erklärung.
So kann ich die vorherige Anweisung wie folgt ändern:
INSERT INTO Cities (CityName) VALUES ('Bangkok'); SELECT * FROM Cities;
Ergebnis:
+----------+------------+ | CityId | CityName | |----------+------------| | 150 | Auckland | | 160 | Danang | | 170 | Khon Kaen | | 180 | Bangkok | +----------+------------+
Einschränkungen der IDENTITY()-Eigenschaft
Die Identitätseigenschaft einer Spalte garantiert Folgendes:
- Jeder neue Wert wird basierend auf dem aktuellen Startwert und Inkrement generiert.
- Jeder neue Wert für eine bestimmte Transaktion unterscheidet sich von anderen gleichzeitigen Transaktionen in der Tabelle.
Folgendes wird nicht garantiert:
- Eindeutigkeit des Werts
- Aufeinanderfolgende Werte innerhalb einer Transaktion
- Aufeinanderfolgende Werte nach Serverneustart oder anderen Fehlern
- Wiederverwendung von Werten (z. B. wenn ein
INSERT
Vorgang schlägt fehl)
Weitere Informationen zu diesen Einschränkungen finden Sie in der Microsoft-Dokumentation.