Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
@@IDENTITY egy rendszerfüggvény, amely az utoljára beillesztett identitásértéket adja vissza.
Transact-SQL szintaxis konvenciók
Szemantika
@@IDENTITY
Visszatérési típusok
numeric(38,0)
Megjegyzések
Miután egy INSERT, SELECT INTO, vagyis tömeges másolási utasítás teljesül, @@IDENTITY tartalmazza az utasítás által generált utolsó identitásértéket.
- Ha az utasítás nem érint egyetlen azonosító oszlopos táblát is,
@@IDENTITYakkor -t adnak visszaNULL. - Ha több sort is beillesztünk, és több identitásértéket generálunk,
@@IDENTITYaz utolsó generált identitásérték jelenik meg. - Ha az utasítás egy vagy több triggert indít, amelyek beillesztéseket hajtanak végre, és identitásértékeket generálnak, akkor a kijelentés utáni hívás
@@IDENTITYvisszaadja az utolsó azonosító értéket, amelyet a triggerek generáltak. - Ha egy trigger egy beillesztési művelet után aktiválódik egy olyan táblán, amelynek van identitásoszlopa, és a trigger egy másik táblába kerül, amelynek nincs identitásoszlopa, akkor
@@IDENTITYaz első beszúrás identitásértékét adja vissza. Az@@IDENTITYérték nem tér vissza korábbi beállításra, ha azINSERTorSELECT INTOutasítás vagy a tömeges másolat sikertelenül működik, vagy ha a tranzakciót visszafordítják.
A sikertelen utasítások és tranzakciók megváltoztathatják a tábla aktuális identitását, és réseket hozhatnak létre az identitásoszlop értékeiben. Az identitásérték soha nem fordul vissza, még akkor sem, ha az a tranzakció, amely megpróbálta beilleszteni az értéket a táblába, nem van kötelezve. Például, ha egy INSERT utasítás megsértés miatt megbukik IGNORE_DUP_KEY , a tábla aktuális identitásértéke továbbra is növelve marad.
@@IDENTITY, SCOPE_IDENTITY, és IDENT_CURRENT hasonló függvények, mert mindegyikük visszaadja az utolsó értéket, amelyet egy IDENTITY tábla oszlopába helyeztek be.
@@IDENTITYésSCOPE_IDENTITYvisszaadja az aktuális ülés bármely táblájában generált utolsó identitásértéket. Azonban azSCOPE_IDENTITYérték csak a jelenlegi hatókörön belül adja vissza;@@IDENTITYnem korlátozódik egy adott hatókörre.IDENT_CURRENTnem korlátozódik a hatáskörbe és az ülésszakhoz; egy meghatározott táblázatra korlátozódik.IDENT_CURRENTvisszaadja az adott tábla által generált identitásértéket bármely ülésen és bármely hatókörben. További információért lásd IDENT_CURRENT (Transact-SQL).
A @@IDENTITY függvény hatóköre a helyi szerveren zajló aktuális munkamenet, ahol végrehajtják. Ez a funkció nem alkalmazható távoli vagy összekapcsolt szerverekre. Egy másik szerveren identitásérték megszerzéséhez hajtsunk végre egy tárolt eljárást azon a távoli vagy összekapcsolt szerveren, és az a tárolt eljárás (amely a távoli vagy kapcsolt szerver kontextusában fut) összegyűjti az identitásértéket, majd visszaküldi a helyi szerver hívó kapcsolatára.
A replikáció befolyásolhatja az @@IDENTITY értéket, mivel a replikációs triggerekben és tárolt eljárásokban használják.
@@IDENTITY nem megbízható mutatója a legfrissebb felhasználó által létrehozott identitásnak, ha az oszlop egy replikációs cikk része. Használhatod a SCOPE_IDENTITY() függvényszintaxist a @@IDENTITYhelyett. További információért lásd SCOPE_IDENTITY (Transact-SQL)
Megjegyzés:
A hívó tárolt eljárást vagy Transact-SQL utasítást újra kell írni, hogy használja a SCOPE_IDENTITY() függvényt, amely a felhasználói utasítás hatókörén belül használt legfrissebb identitást adja vissza, nem pedig a replikáció által használt beágyazott trigger hatókörű identitását.
Példák
A következő példa egy sort helyez be egy táblázatba egy identitásoszloptal (LocationID), és ezt használja @@IDENTITY az új sorban használt identitásérték megjelenítésére.
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