SELECT SCOPE_IDENTITY()
използването на @@IDENTITY може да има неочаквани резултати, така че внимавайте как използвате този. Тригерите, които вмъкват записи в други таблици, ще доведат до промяна на стойността @@IDENTITY - където SCOPE_IDENTITY() ще ви даде последната самоличност само от текущия ви обхват.
Ето примерна извадка, която ще покаже разликата между @@IDENTITY и SCOPE_INSERT() и как те могат да връщат различни стойности..
use tempdb
go
create table table1
(ID int identity)
go
create table table2
(ID int identity(100, 1))
go
create trigger temptrig
on table1
for insert
as
begin
insert table2
default values;
end
go
insert table1
default values;
select SCOPE_IDENTITY(),
@@IDENTITY
Друг вариант, който никой не е обсъждал тук, е да използвате клаузата OUTPUT, която е в SQL 2005. В този случай просто трябва да добавите изходната клауза към вашето вмъкване и след това да хванете този набор от записи от вашия код. Това работи добре при вмъкване на множество записи вместо само 1...
use tempdb
go
create table table1
(ID int identity)
go
insert table1
output inserted.ID
default values;
--OR...
insert table1
output inserted.$identity
default values;