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
Visszaadja az utolsó identitásértéket, amelyet ugyanabban a scope-ban egy identitásoszlopba illesztettek. A scope egy modul: egy tárolt eljárás, trigger, funkció vagy kötet. Ezért, ha két állítás ugyanabban a tárolt eljárásban, függvényben vagy kötetben van, ugyanabban a hatókörben vannak.
Transact-SQL szintaxis konvenciók
Szemantika
SCOPE_IDENTITY()
Visszatérési típusok
numeric(38,0)
Megjegyzések
Az SCOPE_IDENTITY, IDENT_CURRENT és @@IDENTITY hasonló függvények, mert olyan értékeket adnak vissza, amelyeket az identitásoszlopokba helyeznek.
IDENT_CURRENT nem korlátozódik a hatókörbe és az üléshez; egy meghatározott táblázatra korlátozódik. IDENT_CURRENT visszaadja az adott tábla által generált értéket bármely ülésen és bármely hatókörben. További információért lásd IDENT_CURRENT (Transact-SQL).
SCOPE_IDENTITY és @@IDENTITY visszaadják az aktuális játék bármely táblájában generált utolsó identitásértékeket. Azonban SCOPE_IDENTITY csak az aktuális hatókörön belül beillesztett értékeket ad; @@IDENTITY nem korlátozódik egy adott hatókörre.
Például két tábla van, T1 és T2, és T1-en definiálva van egy INSERT trigger. Amikor egy sort behelyezünk a T1-be, a ravasz beindul, és egy sort helyez be a T2-be. Ez a helyzet két távcsövet illusztrál: a T1-es betétet és a T2-es betétet a ravasz mellett.
Feltételezve, hogy mind T1, mind T2 rendelkezik azonossági oszlopokkal, @@IDENTITY és SCOPE_IDENTITY eltérő értékeket adnak vissza egy INSERT utasítás végén T1-en. @@IDENTITY visszaadja az utolsó identitásoszlop értéket, amelyet bármely hatótávon beillesztettek az aktuális ülésszakban. Ez az érték, amelyet T2-ben illesztettek. SCOPE_IDENTITY() adja vissza a T1-be beillesztett IDENTITY értéket. Ez volt az utolsó betét, amely ugyanabban a távcsőben történt. Az SCOPE_IDENTITY() függvény akkor adja vissza a nullértéket, ha a függvényt meghívják, mielőtt bármely INSERT utasítás megjelenne egy identitásoszlopba a scope-ban.
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 IGNORE_DUP_KEY megsértés miatt megbukik, a tábla aktuális identitásértéke továbbra is növelik.
Példák
A. @@IDENTITY és SCOPE_IDENTITY használata triggerekkel
A következő példa két táblát TZ hoz létre, és TY, valamint egy INSERT triggeret .TZ Amikor egy sort behelyezünk a táblábaTZ, a trigger (Ztrig) aktiválódik, és egy sort helyez be .TY
USE tempdb;
GO
CREATE TABLE TZ (
Z_id INT IDENTITY(1,1)PRIMARY KEY,
Z_name VARCHAR(20) NOT NULL);
INSERT TZ
VALUES ('Lisa'),('Mike'),('Carla');
SELECT * FROM TZ;
Eredményhalmazom: Így néz ki a TZ tábla.
Z_id Z_name
-------------
1 Lisa
2 Mike
3 Carla
CREATE TABLE TY (
Y_id INT IDENTITY(100,5)PRIMARY KEY,
Y_name VARCHAR(20) NULL);
INSERT TY (Y_name)
VALUES ('boathouse'), ('rocks'), ('elevator');
SELECT * FROM TY;
Eredményhalmaz: Így néz ki a TY:
Y_id Y_name
---------------
100 boathouse
105 rocks
110 elevator
Létrehozzuk azt a triggert, amely egy sort helyez be a TY táblába, amikor egy sort beillesztenek a TZ táblába.
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS
BEGIN
INSERT TY VALUES ('')
END;
Indítsd be a triggert, és határozd meg, milyen azonossági értékeket kapsz a @@IDENTITY és SCOPE_IDENTITY függvényekkel.
INSERT TZ VALUES ('Rosalie');
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];
GO
SELECT @@IDENTITY AS [@@IDENTITY];
GO
Itt van az eredmények összessége.
/*SCOPE_IDENTITY returns the last identity value in the same scope. This was the insert on table TZ.*/`
SCOPE_IDENTITY
4
/*@@IDENTITY returns the last identity value inserted to TY by the trigger.
This fired because of an earlier insert on TZ.*/
@@IDENTITY
115
B. @@IDENTITY és SCOPE_IDENTITY() használata replikációval
Az alábbi példák bemutatják, hogyan lehet @@IDENTITY használni és SCOPE_IDENTITY() beillesztést egy olyan adatbázisban, amelyet az egyesítés replikációhoz publikálnak. Mindkét táblázat a példákban a AdventureWorks2025 mintaadatbázisban található: Person.ContactType nem publikálják, és Sales.Customer közzéteszik. Az egyesülés replikáció triggereket ad a közzétett táblákhoz. Ezért @@IDENTITY vissza lehet térni az értéket a beszúrásból egy replikációs rendszer táblába a felhasználói tábla helyett.
A Person.ContactType táblázat maximális azonossági értéke 20. Ha egy sort beillesztesz a táblázatba @@IDENTITY , és SCOPE_IDENTITY() ugyanazt az értéket adod vissza.
USE AdventureWorks2022;
GO
INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager');
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];
GO
SELECT @@IDENTITY AS [@@IDENTITY];
GO
Itt van az eredmények összessége.
SCOPE_IDENTITY
21
@@IDENTITY
21
A Sales.Customer táblázat maximális azonossági értéke 29483. Ha egy sort beviszel a táblázatba @@IDENTITY , és SCOPE_IDENTITY() különböző értékeket adsz vissza.
SCOPE_IDENTITY() visszaadja az értéket az insekélésből a felhasználói táblába, míg @@IDENTITY az értéket az insertből a replikációs rendszer táblájába viszi. Olyan alkalmazások használata SCOPE_IDENTITY() , amelyek hozzáférést igényelnek a beillesztett identitásértékhez.
INSERT INTO Sales.Customer ([TerritoryID],[PersonID]) VALUES (8,NULL);
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];
GO
SELECT @@IDENTITY AS [@@IDENTITY];
GO
Itt van az eredmények összessége.
SCOPE_IDENTITY
29484
@@IDENTITY
89