Sdílet prostřednictvím


@@IDENTITY (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

@@IDENTITY je systémová funkce, která vrací poslední vloženou identitní hodnotu.

Transact-SQL konvence syntaxe

Syntaxe

@@IDENTITY  

Návratové typy

numerické(38,0)

Poznámky

Po dokončení , SELECT INTO, nebo hromadného kopírovacího příkazu INSERTobsahuje poslední hodnotu identity, @@IDENTITY která je příkazem generována.

  • Pokud příkaz neovlivnil žádné tabulky s identitními sloupci, @@IDENTITY vrátí NULL.
  • Pokud je vloženo více řádků, generuje se více hodnot identity, @@IDENTITY vrátí se poslední vygenerovaná hodnota identity.
  • Pokud příkaz spustí jeden nebo více spouštěčů, které provedou vložení generující hodnoty identity, volání @@IDENTITY ihned po příkazu vrátí poslední hodnotu identity generovanou spouštěči.
  • Pokud je spouštěč aktivován po akci vložení do tabulky, která má sloupec identity, a spouštěč vloží do jiné tabulky, která nemá sloupec identity, @@IDENTITY vrátí hodnotu identity z prvního sloupce. Hodnota @@IDENTITY se nevrátí na předchozí nastavení, pokud INSERT příkaz or SELECT INTO nebo hromadná kopie selže, nebo pokud je transakce vrácena zpět.

Neúspěšné příkazy a transakce mohou změnit aktuální identitu tabulky a vytvořit mezery v hodnotách sloupců identity. Hodnota identity se nikdy nevrátí zpět, i když transakce, která se pokusila hodnotu vložit do tabulky, není potvrzena. Například pokud příkaz INSERT selže kvůli IGNORE_DUP_KEY porušení, aktuální hodnota identity tabulky je stále zvýšena.

@@IDENTITY, SCOPE_IDENTITY, a IDENT_CURRENT jsou podobné funkce, protože všechny vracejí poslední hodnotu vloženou IDENTITY do sloupce tabulky.

  • @@IDENTITY a SCOPE_IDENTITY vrať poslední hodnotu identity generovanou v libovolné tabulce v aktuální relaci. Nicméně vrací SCOPE_IDENTITY hodnotu pouze v rámci aktuálního rozsahu; @@IDENTITY není omezena na konkrétní rozsah.

  • IDENT_CURRENT není omezena rozsahem a zasedáním; je omezen na specifickou tabulku. IDENT_CURRENT vrací identitní hodnotu generovanou pro konkrétní tabulku v jakékoli relaci a v jakémkoli rozsahu. Pro více informací viz IDENT_CURRENT (Transact-SQL).

Rozsah @@IDENTITY funkce je aktuální relace na lokálním serveru, na kterém je vykonávána. Tato funkce nemůže být aplikována na vzdálené ani propojené servery. Pro získání hodnoty identity na jiném serveru spusťte uloženou proceduru na tomto vzdáleném nebo propojeném serveru a tato uložená procedura (která se vykonává v kontextu vzdáleného nebo propojeného serveru) shromáždí hodnotu identity a vrátí ji volajícímu spojení na lokálním serveru.

Replikace může ovlivnit hodnotu @@IDENTITY , protože se používá v rámci spouštěčů replikace a uložených procedur. @@IDENTITY není spolehlivým indikátorem nejnovější uživatelem vytvořené identity, pokud je sloupec součástí replikačního článku. Můžete použít syntaxi SCOPE_IDENTITY() funkce místo .@@IDENTITY Pro více informací viz SCOPE_IDENTITY (Transact-SQL)

Poznámka:

Volající uložená procedura nebo Transact-SQL příkaz musí být přepsán tak, aby používal funkci SCOPE_IDENTITY() , která vrací nejnovější identitu použitou v rozsahu uživatelského příkazu, nikoli identitu v rozsahu vnořeného spouštěče používaného replikací.

Examples

Následující příklad vloží řádek do tabulky s identifikačním sloupcem (LocationID) a použije @@IDENTITY ho k zobrazení hodnoty identity použité v novém řádku.

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