Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
@@IDENTITY is een systeemfunctie die de laatst ingevoegde identiteitswaarde teruggeeft.
Transact-SQL syntaxis-conventies
Syntaxis
@@IDENTITY
Retourtypen
numeriek(38,0)
Opmerkingen
Nadat een , SELECT INTO, of bulk copy statement is voltooid, @@IDENTITY bevat het INSERTde laatste identiteitswaarde die door de instructie wordt gegenereerd.
- Als de instructie geen enkele tabel met identiteitskolommen beïnvloedde,
@@IDENTITYgeeftNULL. - Als meerdere rijen worden ingevoegd, die meerdere identiteitswaarden genereren,
@@IDENTITYgeeft de laatst gegenereerde identiteitswaarde terug. - Als de instructie één of meer triggers activeert die inserts uitvoeren die identiteitswaarden genereren, geeft direct na de instructie aanroepen
@@IDENTITYde laatste identiteitswaarde terug die door de triggers is gegenereerd. - Als een trigger wordt afgevuurd na een invoegactie op een tabel met een identiteitskolom, en de trigger wordt ingevoegd in een andere tabel zonder identiteitskolom,
@@IDENTITYgeeft de identiteitswaarde van de eerste invoeging terug. De@@IDENTITYwaarde keert niet terug naar een eerdere instelling als deINSERTor-instructieSELECT INTOof bulkkopie faalt, of als de transactie wordt teruggerold.
Mislukte statements en transacties kunnen de huidige identiteit van een tabel veranderen en gaten creëren in de identiteitskolomwaarden. De identiteitswaarde wordt nooit teruggerold, ook al is de transactie die probeerde de waarde in de tabel in te voegen niet committed. Als bijvoorbeeld een INSERT-instructie faalt door een IGNORE_DUP_KEY overtreding, wordt de huidige identiteitswaarde voor de tabel nog steeds verhoogd.
@@IDENTITY, SCOPE_IDENTITY, en IDENT_CURRENT zijn vergelijkbare functies omdat ze allemaal de laatst ingevoerde waarde in de IDENTITY kolom van een tabel teruggeven.
@@IDENTITYenSCOPE_IDENTITYgeef de laatst gegenereerde identiteitswaarde terug in een tabel in de huidige sessie. Echter,SCOPE_IDENTITYde waarde wordt alleen binnen de huidige scope teruggegeven;@@IDENTITYis niet beperkt tot een specifieke scope.IDENT_CURRENTis niet beperkt door reikwijdte en sessie; het is beperkt tot een gespecificeerde tabel.IDENT_CURRENTgeeft de identiteitswaarde terug die voor een specifieke tabel in elke sessie en elke scope is gegenereerd. Voor meer informatie, zie IDENT_CURRENT (Transact-SQL).
De scope van de @@IDENTITY functie is de huidige sessie op de lokale server waarop deze wordt uitgevoerd. Deze functie kan niet worden toegepast op externe of gekoppelde servers. Om een identiteitswaarde op een andere server te verkrijgen, voer je een opgeslagen procedure uit op die externe of gekoppelde server en laat die opgeslagen procedure (die wordt uitgevoerd in de context van de externe of gekoppelde server) de identiteitswaarde verzamelen en terugsturen naar de aanroepende verbinding op de lokale server.
Replicatie kan de @@IDENTITY waarde beïnvloeden, omdat deze wordt gebruikt binnen de replicatietriggers en opgeslagen procedures.
@@IDENTITY is geen betrouwbare indicator van de meest recente door de gebruiker aangemaakte identiteit als de kolom deel uitmaakt van een replicatieartikel. Je kunt de SCOPE_IDENTITY() functiesyntaxis gebruiken in plaats van @@IDENTITY. Voor meer informatie, zie SCOPE_IDENTITY (Transact-SQL)
Opmerking
De aanroepende stored procedure of Transact-SQL-instructie moet worden herschreven om de SCOPE_IDENTITY() functie te gebruiken, die de meest recente identiteit teruggeeft die binnen het bereik van die user statement is gebruikt, en niet de identiteit binnen de scope van de geneste trigger die door replicatie wordt gebruikt.
Voorbeelden
Het volgende voorbeeld voegt een rij in in een tabel met een identiteitskolom (LocationID) en gebruikt @@IDENTITY om de identiteitswaarde in de nieuwe rij weer te geven.
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