Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
@@IDENTITY je systémová funkce, která vrací poslední vloženou identitní hodnotu.
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,
@@IDENTITYvrátíNULL. - Pokud je vloženo více řádků, generuje se více hodnot identity,
@@IDENTITYvrá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í
@@IDENTITYihned 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,
@@IDENTITYvrátí hodnotu identity z prvního sloupce. Hodnota@@IDENTITYse nevrátí na předchozí nastavení, pokudINSERTpříkaz orSELECT INTOnebo 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.
@@IDENTITYaSCOPE_IDENTITYvrať poslední hodnotu identity generovanou v libovolné tabulce v aktuální relaci. Nicméně vracíSCOPE_IDENTITYhodnotu pouze v rámci aktuálního rozsahu;@@IDENTITYnení omezena na konkrétní rozsah.IDENT_CURRENTnení omezena rozsahem a zasedáním; je omezen na specifickou tabulku.IDENT_CURRENTvrací 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