@@IDENTITY (Transact-SQL)@@IDENTITY (Transact-SQL)

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Eine Systemfunktion, die den zuletzt eingefügten Identitätswert zurückgibt.Is a system function that returns the last-inserted identity value.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

@@IDENTITY  

RückgabetypenReturn Types

numeric(38,0)numeric(38,0)

BemerkungenRemarks

Nachdem eine INSERT- oder eine SELECT INTO-Anweisung bzw. eine Massenkopieranweisung abgeschlossen ist, enthält @@IDENTITY den letzten von der Anweisung generierten Identitätswert.After an INSERT, SELECT INTO, or bulk copy statement is completed, @@IDENTITY contains the last identity value that is generated by the statement. Wenn sich die Anweisung nicht auf Tabellen mit Identitätsspalten ausgewirkt hat, gibt @@IDENTITY den Wert NULL zurück.If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. Wenn mehrere Zeilen eingefügt und dabei mehrere Identitätswerte generiert werden, gibt @@IDENTITY den zuletzt generierten Identitätswert zurück.If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. Wenn die Anweisung mindestens einen Trigger auslöst, der Einfügevorgänge zum Generieren von Identitätswerten durchführt, wird durch das Aufrufen von @@IDENTITY sofort nach der Anweisung der letzte von den Triggern generierte Identitätswert zurückgegeben.If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. 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.If a trigger is fired after an insert action on a table that has an identity column, and the trigger inserts into another table that does not have an identity column, @@IDENTITY returns the identity value of the first insert. Der @@IDENTITY-Wert kehrt nicht zu einer vorherigen Einstellung zurück, wenn die INSERT- oder SELECT INTO-Anweisung oder der Massenkopiervorgang fehlschlägt bzw. für die Transaktion ein Rollback ausgeführt wird.The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

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.Failed statements and transactions can change the current identity for a table and create gaps in the identity column values. 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.The identity value is never rolled back even though the transaction that tried to insert the value into the table is not committed. Wenn beispielsweise eine INSERT-Anweisung aufgrund einer IGNORE_DUP_KEY-Verletzung fehlschlägt, wird der aktuelle Identitätswert für die Tabelle trotzdem inkrementiert.For example, if an INSERT statement fails because of an IGNORE_DUP_KEY violation, the current identity value for the table is still incremented.

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, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions because they all return the last value inserted into the IDENTITY column of a table.

@@IDENTITY und SCOPE_IDENTITY geben den letzten Identitätswert zurück, der in einer Tabelle in der aktuellen Sitzung generiert wurde.@@IDENTITY and SCOPE_IDENTITY return the last identity value generated in any table in the current session. Allerdings gibt SCOPE_IDENTITY den Wert nur im aktuellen Gültigkeitsbereich zurück. @@IDENTITY ist nicht auf einen bestimmten Gültigkeitsbereich begrenzt.However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT ist nicht durch einen Gültigkeitsbereich oder eine Sitzung begrenzt, sondern auf eine angegebene Tabelle.IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT gibt den für eine bestimmte Tabelle in einer Sitzung oder einem Gültigkeitsbereich generierten Identitätswert zurück.IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. Weitere Informationen finden Sie unter IDENT_CURRENT (Transact-SQL).For more information, see 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.The scope of the @@IDENTITY function is current session on the local server on which it is executed. Diese Funktion kann nicht für Remote- oder Verbindungsserver angewendet werden.This function cannot be applied to remote or linked servers. 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.To obtain an identity value on a different server, execute a stored procedure on that remote or linked server and have that stored procedure (which is executing in the context of the remote or linked server) gather the identity value and return it to the calling connection on the local server.

Die Replikation hat möglicherweise Auswirkungen auf den @@IDENTITY-Wert, da er in den Replikationstriggern und gespeicherten Prozeduren verwendet wird.Replication may affect the @@IDENTITY value, since it is used within the replication triggers and stored procedures. @@IDENTITY stellt keinen zuverlässigen Indikator der zuletzt vom Benutzer erstellten Identität dar, wenn die Spalte Bestandteil eines Replikationsartikels ist.@@IDENTITY is not a reliable indicator of the most recent user-created identity if the column is part of a replication article. Sie können die Syntax der SCOPE_IDENTITY()-Funktion statt @@IDENTITY verwenden.You can use the SCOPE_IDENTITY() function syntax instead of @@IDENTITY. Weitere Informationen finden Sie unter SCOPE_IDENTITY (Transact-SQL).For more information, see SCOPE_IDENTITY (Transact-SQL)

Hinweis

Die aufrufende gespeicherte Prozedur oder die Transact-SQLTransact-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.The calling stored procedure or Transact-SQLTransact-SQL statement must be rewritten to use the SCOPE_IDENTITY() function, which returns the latest identity used within the scope of that user statement, and not the identity within the scope of the nested trigger used by replication.

BeispieleExamples

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.The following example inserts a row into a table with an identity column (LocationID) and uses @@IDENTITY to display the identity value used in the new row.

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  

Weitere InformationenSee Also

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