SELECT SCOPE_IDENTITY()
l'utilizzo di @@IDENTITY può avere risultati inaspettati, quindi fai attenzione a come lo usi. I trigger che inseriscono record in altre tabelle causeranno la modifica del valore @@IDENTITY, dove SCOPE_IDENTITY() ti darà l'ultima identità solo dal tuo ambito corrente.
Ecco un esempio che mostrerà la differenza tra @@IDENTITY e SCOPE_INSERT() e come possono restituire valori diversi.
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
Un'altra opzione che nessuno ha discusso qui è usare la clausola OUTPUT che è in SQL 2005. In questo caso, dovresti solo aggiungere la clausola di output al tuo inserto e quindi catturare quel recordset dal tuo codice. Funziona bene quando si inseriscono più record invece di 1 solo...
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;