SELECT SCOPE_IDENTITY()
usar @@IDENTITY puede tener resultados inesperados, así que tenga cuidado de cómo lo usa. Los disparadores que insertan registros en otras tablas harán que el valor de @@IDENTITY cambie, donde SCOPE_IDENTITY() le dará la última identidad solo de su alcance actual.
Aquí hay una muestra que mostrará la diferencia entre @@IDENTITY y SCOPE_INSERT() y cómo pueden devolver 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
Otra opción que nadie ha discutido aquí es usar la cláusula OUTPUT que está en SQL 2005. En este caso, solo tendría que agregar la cláusula de salida a su inserción y luego capturar ese conjunto de registros de su código. Esto funciona bien cuando se insertan varios registros en lugar de solo 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;