SELECT SCOPE_IDENTITY()
usar @@IDENTITY pode ter resultados inesperados, então tenha cuidado ao usar esse. Triggers que inserem registros em outras tabelas farão com que o valor @@IDENTITY mude - onde SCOPE_IDENTITY() fornecerá a última identidade apenas do seu escopo atual.
Aqui está um exemplo que mostrará a diferença entre @@IDENTITY e SCOPE_INSERT() e como eles podem retornar valores diferentes.
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
Outra opção que ninguém discutiu aqui é usar a cláusula OUTPUT que está no SQL 2005. Nesse caso, você só teria que adicionar a cláusula de saída à sua inserção e depois capturar esse conjunto de registros do seu código. Isso funciona bem ao inserir vários registros em vez de apenas 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;