SELECT SCOPE_IDENTITY()
použití @@IDENTITY může mít neočekávané výsledky, takže buďte opatrní, jak jej používáte. Spouštěče, které vkládají záznamy do jiných tabulek, způsobí změnu hodnoty @@IDENTITY - kde SCOPE_IDENTITY() vám poskytne poslední identitu pouze z vašeho aktuálního oboru.
Zde je ukázka, která ukáže rozdíl mezi @@IDENTITY a SCOPE_INSERT() a jak mohou vrátit různé hodnoty..
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
Další možností, kterou zde nikdo neprobíral, je použití klauzule OUTPUT, která je v SQL 2005. V tomto případě stačí přidat výstupní klauzuli do vložení a poté tuto sadu záznamů zachytit z kódu. To funguje dobře při vkládání více záznamů namísto pouhého 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;