@@IDENTITY (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

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

Transact-SQL-Syntaxkonventionen

Syntax

@@IDENTITY  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

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 erfolgt kein Rollback, auch wenn für die Transaktion, die versuchte, den Wert in die Tabelle einzufügen, kein Commit ausgeführt wird. 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).

Hinweis

Die aufrufende gespeicherte Prozedur oder die Transact-SQL-Anweisung muss so umgeschrieben werden, dass sie die SCOPE_IDENTITY()-Funktion verwendet, die die neueste im Bereich dieser Benutzeranweisung verwendete Identität und nicht die Identität im Bereich des geschachtelten Triggers zurückgibt, 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 AdventureWorks2022;  
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  

Weitere Informationen

Systemfunktionen (Transact-SQL)
CREATE TABLE (Transact-SQL)
IDENT_CURRENT (Transact-SQL)
INSERT (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
SELECT (Transact-SQL)