Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
@@IDENTITY ist eine Systemfunktion, die den zuletzt eingefügten Identitätswert zurückgibt.
Transact-SQL-Syntaxkonventionen
Syntax
@@IDENTITY
Rückgabetypen
numeric(38,0)
Hinweise
Nachdem eine , SELECT INTO, oder Massenkopie-Anweisung abgeschlossen ist, @@IDENTITY enthält sie INSERTden letzten von der Statement generierten Identitätswert.
- Wenn die Anweisung keine Tabellen mit Identitätsspalten beeinflusste,
@@IDENTITYgibtNULL. - Werden mehrere Zeilen eingefügt, wodurch mehrere Identitätswerte erzeugt werden,
@@IDENTITYwird der zuletzt erzeugte Identitätswert zurückgegeben. - Wenn die Anweisung einen oder mehrere Trigger auslöst, die Einfügungen ausführen, die Identitätswerte generieren, wird
@@IDENTITYunmittelbar nach der Anweisung der letzte von den Triggern generierte Identitätswert zurückgegeben. - Wenn ein Trigger nach einer Einfügeaktion auf einer Tabelle mit einer Identitätsspalte ausgelöst wird und der Trigger in eine andere Tabelle ohne Identitätsspalte eingefügt wird, gibt
@@IDENTITYer den Identitätswert des ersten Einfügigs zurück. Der Wert@@IDENTITYwird nicht auf eine vorherige Einstellung zurückgesetzt, wenn die Or-AnweisungSELECT INTOoder MassenkopieINSERTfehlschlägt oder die Transaktion zurückgesetzt 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 eines IGNORE_DUP_KEY Verstoßes fehlschlägt, wird der aktuelle Identitätswert der Tabelle weiterhin erhöht.
@@IDENTITY, SCOPE_IDENTITY, und IDENT_CURRENT sind ähnliche Funktionen, da sie alle den zuletzt eingefügten Wert in die IDENTITY Spalte einer Tabelle zurückgeben.
@@IDENTITYundSCOPE_IDENTITYden zuletzt in einer Tabelle in der aktuellen Sitzung generierten Identitätswert zurückzugeben. DerSCOPE_IDENTITYWert wird jedoch nur innerhalb des aktuellen Umfangs zurückgegeben;@@IDENTITYist nicht auf einen bestimmten Umfang beschränkt.IDENT_CURRENTist nicht durch Umfang und Sitzung begrenzt; sie ist auf eine bestimmte Tabelle beschränkt.IDENT_CURRENTgibt den Identitätswert zurück, der für eine bestimmte Tabelle in jeder Sitzung und jedem Scope erzeugt wurde. Weitere Informationen finden Sie unter IDENT_CURRENT (Transact-SQL).
Der Anwendungsbereich der @@IDENTITY Funktion ist 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.
Replikation kann den @@IDENTITY Wert beeinflussen, da er innerhalb der Replikationsauslöser und gespeicherten Prozeduren verwendet wird.
@@IDENTITY ist kein verlässlicher Indikator für die zuletzt vom Nutzer erstellte Identität, wenn die Spalte Teil eines Replikationsartikels ist. Du kannst die SCOPE_IDENTITY() Funktionssyntax anstelle von @@IDENTITYverwenden. 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