@@IDENTITY (Transact-SQL)

Eine Systemfunktion, die den zuletzt eingefügten Identitätswert zurückgibt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

@@IDENTITY

Rückgabetypen

numeric(38,0)

Hinweise

Nachdem eine INSERT- oder SELECT INTO-Anweisung oder eine Massenkopieranweisung abgeschlossen ist, enthält @@IDENTITY den letzten von der Anweisung generierten Identitätswert. Wenn sich die Anweisung nicht auf Tabellen mit Identitätsspalten ausgewirkt hat, gibt @@IDENTITY den Wert NULL zurück. Wenn mehrere Zeilen eingefügt und dabei mehrere Identitätswerte generiert werden, gibt @@IDENTITY den zuletzt generierten Identitätswert zurück. Wenn die Anweisung einen oder mehrere Trigger auslöst, die Einfügevorgänge zum Generieren von Identitätswerten durchführen, wird durch das Aufrufen von @@IDENTITY sofort nach der Anweisung der letzte von den Triggern generierte Identitätswert zurückgegeben. Wenn nach einer Einfügeaktion bei einer Tabelle mit einer Identitätsspalte ein Trigger ausgelöst wird und der Trigger das Einfügen in einer anderen Tabelle bewirkt, in der keine Identitätsspalte vorhanden ist, dann gibt @@IDENTITY den Identitätswert der Einfügung zurück. Der @@IDENTITY-Wert kehrt nicht zu einer vorherigen Einstellung zurück, wenn die INSERT- oder SELECT INTO-Anweisung fehlschlägt, der Massenkopiervorgang fehlschlägt oder für die Transaktion ein Rollback durchgeführt wird.

Fehlgeschlagene Anweisungen oder Transaktionen können die aktuelle Identität für eine Tabelle ändern und zu Lücken in den Identitätsspaltenwerten führen. Für den Identitätswert wird nie ein Rollback durchgeführt, obwohl für die Transaktion, die den Wert in die Tabelle einzufügen versuchte, kein Commit ausgeführt wurde. Wenn beispielsweise eine INSERT-Anweisung aufgrund einer IGNORE_DUP_KEY-Verletzung fehlschlägt, wird der aktuelle Identitätswert für die Tabelle trotzdem inkrementiert.

Bei @@IDENTITY, SCOPE_IDENTITY und IDENT_CURRENT handelt es sich um ähnliche Funktionen. Sie geben den letzten Wert zurück, der in die IDENTITY-Spalte einer Tabelle eingefügt wurde.

@@IDENTITY und SCOPE_IDENTITY geben den letzten Identitätswert zurück, der in einer Tabelle in der aktuellen Sitzung generiert wurde. Allerdings gibt SCOPE_IDENTITY den Wert nur im aktuellen Gültigkeitsbereich zurück. @@IDENTITY ist nicht auf einen bestimmten Gültigkeitsbereich begrenzt.

IDENT_CURRENT ist nicht durch einen Gültigkeitsbereich oder eine Sitzung begrenzt, sondern auf eine angegebene Tabelle. IDENT_CURRENT gibt den für eine bestimmte Tabelle in einer Sitzung oder einem Gültigkeitsbereich generierten Identitätswert zurück. Weitere Informationen finden Sie unter IDENT_CURRENT (Transact-SQL).

Der Gültigkeitsbereich der @@IDENTITY-Funktion erstreckt sich auf die aktuelle Sitzung auf dem lokalen Server, auf dem sie ausgeführt wird. Diese Funktion kann nicht für Remote- oder Verbindungsserver angewendet werden. Um einen Identitätswert auf einem anderen Server zu erhalten, müssen Sie eine gespeicherte Prozedur auf einem Remote- oder Verbindungsserver ausführen. Diese gespeicherte Prozedur (die im Kontext des Remote- bzw. Verbindungsservers ausgeführt wird) muss die Identitätswertinformationen sammeln und an die aufrufende Verbindung auf dem lokalen Server zurückgeben.

Die Replikation hat möglicherweise Auswirkungen auf den @@IDENTITY-Wert, da er in den Replikationstriggern und gespeicherten Prozeduren verwendet wird.@@IDENTITY stellt keinen zuverlässigen Indikator der zuletzt vom Benutzer erstellten Identität dar, wenn die Spalte Bestandteil eines Replikationsartikels ist. Sie können die Syntax der SCOPE_IDENTITY()-Funktion statt @@IDENTITY verwenden. Weitere Informationen finden Sie unter SCOPE_IDENTITY (Transact-SQL).

HinweisHinweis

Die aufrufende gespeicherte Prozedur oder die Transact-SQL-Anweisung muss neu geschrieben werden, um die SCOPE_IDENTITY()-Funktion zu verwenden, die die neueste Identität zurückgibt, die im Bereich dieser Benutzeranweisung verwendet wird, und nicht die Identität im Bereich des geschachtelten Triggers, der von der Replikation verwendet wird.

Beispiele

Das folgende Beispiel fügt eine Zeile in eine Tabelle mit einer Identitätsspalte (LocationID) ein und zeigt mithilfe von @@IDENTITY den in der neuen Zeile verwendeten Identitätswert an.

USE AdventureWorks;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO