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. В этом случае вам просто нужно добавить предложение output в вашу вставку, а затем перехватить этот набор записей из вашего кода. Это хорошо работает при вставке нескольких записей вместо 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;