Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
@@IDENTITY är en systemfunktion som returnerar det senast insatta identitetsvärdet.
Transact-SQL syntaxkonventioner
Syntax
@@IDENTITY
Returtyper
numerisk(38,0)
Anmärkningar
Efter att ett INSERT, SELECT INTO, eller masskopierings-uttalande är klart, @@IDENTITY innehåller det det sista identitetsvärdet som genereras av satsen.
- Om satsen inte påverkade några tabeller med identitetskolumner,
@@IDENTITYreturnerarNULL. - Om flera rader infogas, vilket genererar flera identitetsvärden,
@@IDENTITYreturnerar det senaste identitetsvärdet som genereras. - Om satsen utlöser en eller flera triggers som utför insättningar som genererar identitetsvärden, returnerar anrop
@@IDENTITYomedelbart efter uttalandet det senaste identitetsvärdet som genererats av triggers. - Om en trigger utlöses efter en insättningsåtgärd i en tabell som har en identitetskolumn, och triggern infogas i en annan tabell som inte har någon identitetskolumn,
@@IDENTITYreturnerar identitetsvärdet för den första insättningen. Värdet@@IDENTITYåtergår inte till en tidigare inställning om or-satsenINSERTSELECT INTOeller bulkkopian misslyckas, eller om transaktionen rullas tillbaka.
Misslyckade satser och transaktioner kan ändra den aktuella identiteten för en tabell och skapa luckor i identitetskolumnens värden. Identitetsvärdet rullas aldrig tillbaka även om transaktionen som försökte infoga värdet i tabellen inte är committad. Till exempel, om ett INSERT-uttalande misslyckas på grund av ett IGNORE_DUP_KEY brott, ökar fortfarande det aktuella identitetsvärdet för tabellen.
@@IDENTITY, SCOPE_IDENTITY, och IDENT_CURRENT är liknande funktioner eftersom de alla returnerar det sista värdet som satts in i kolumnen IDENTITY i en tabell.
@@IDENTITYochSCOPE_IDENTITYreturnera det senaste identitetsvärdet som genererats i någon tabell i den aktuella sessionen. Dock returnerarSCOPE_IDENTITYvärdet endast inom den aktuella omfattningen;@@IDENTITYär inte begränsad till ett specifikt omfång.IDENT_CURRENTär inte begränsad av omfattning och session; den är begränsad till en specificerad tabell.IDENT_CURRENTreturnerar identitetsvärdet som genererats för en specifik tabell i varje session och i varje scope. För mer information, se IDENT_CURRENT (Transact-SQL).
Funktionen är den @@IDENTITY aktuella sessionen på den lokala server där den körs. Denna funktion kan inte tillämpas på fjärrservrar eller länkade servrar. För att erhålla ett identitetsvärde på en annan server, kör en lagrad produr på den fjärranslutna eller länkade servern och låt den lagrade proceduren (som körs i kontexten av den fjärranslutna eller länkade servern) samla in identitetsvärdet och returnera det till den anropande anslutningen på den lokala servern.
Replikering kan påverka värdet @@IDENTITY , eftersom det används inom replikationstriggers och lagrade procedurer.
@@IDENTITY är inte en tillförlitlig indikator på den senaste användarskapade identiteten om kolumnen ingår i en replikationsartikel. Du kan använda SCOPE_IDENTITY() funktionssyntaxen istället för @@IDENTITY. För mer information, se SCOPE_IDENTITY (Transact-SQL)
Anmärkning
Den anropande lagrade proceduren eller Transact-SQL-satsen måste skrivas om för att använda SCOPE_IDENTITY() funktionen, som returnerar den senaste identiteten som användes inom användarsatsens omfattning, och inte identiteten inom omfattningen av den nästlade triggern som används vid replikering.
Examples
Följande exempel infogar en rad i en tabell med en identitetskolumn (LocationID) och använder @@IDENTITY det för att visa identitetsvärdet som används i den nya raden.
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