@@IDENTITY (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

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

Topic link icon Transact-SQL-Syntaxkonventionen

  
@@IDENTITY  

numeric(38,0)

Nach einer INSERT, SELECT INTO- oder Bulk Copy-Anweisung abgeschlossen ist, @@IDENTITY enthält den letzten Identitätswert, der von der Anweisung generiert wird. Wenn die Anweisung kein Tabellen mit Identitätsspalten ausgewirkt hat@IDENTITY gibt NULL zurück. Wenn mehrere Zeilen eingefügt werden, generieren Sie mehrere Identitätswerte@IDENTITY gibt den letzten generierten Identitätswert zurück. Wenn die Anweisung einen oder mehrere Trigger, die Einfügevorgänge, die Identity-Werte zu generieren auslöst, @ Aufrufen@IDENTITY sofort, nachdem die Anweisung gibt den letzten, durch die Trigger generierten Identitätswert zurück. Wenn ein Trigger ausgelöst wird, nach einer Einfügeaktion bei einer Tabelle mit einer Identity-Spalte und der Trigger in eine andere Tabelle, die eine Identity-Spalte keinen fügt @@IDENTITY gibt den Identitätswert der Einfügung zurück. Der @@IDENTITY Wert kehrt nicht zu einer vorherigen Einstellung, wenn die INSERT- oder SELECT INTO-Anweisung Massenkopiervorgang fehlschlägt oder die Transaktion ein Rollback ausgefü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.

@@IDENTITY, SCOPE_IDENTITY und IDENT_CURRENT sind ähnliche Funktionen auf, da sie alle zurückkehren, dass den letzten Wert in die Identitätsspalte einer Tabelle eingefügt.

@@IDENTITY und SCOPE_IDENTITY geben den letzten Identitätswert, der in einer beliebigen Tabelle in der aktuellen Sitzung generiert zurück. 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 Geltungsbereich der @@IDENTITY Funktion ist die aktuelle Sitzung auf dem lokalen Server, auf dem er 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.

Kann die Replikation Auswirkungen auf die @@IDENTITY Wert, da sie in den replikationstriggern und gespeicherten Prozeduren verwendet wird. @@IDENTITY ist nicht zuverlässiger Indikator der letzte Benutzer erstellten Identität dar, wenn die Spalte Teil eines replikationsartikels ist. Sie können die Syntax der SCOPE_IDENTITY()-Funktion statt @@IDENTITY. Weitere Informationen finden Sie unter SCOPE_IDENTITY (Transact-SQL)

System_CAPS_ICON_note.jpg Hinweis


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.

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 AdventureWorks2012;  
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  

Systemfunktionen (Transact-SQL)
Erstellen der Tabelle (Transact-SQL)
IDENT_CURRENT (Transact-SQL)
INSERT (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
Wählen Sie (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: