SELECT SCOPE_IDENTITY()
Brug af @@IDENTITY kan have uventede resultater, så vær forsigtig med, hvordan du bruger den. Triggere, der indsætter poster i andre tabeller, vil få @@IDENTITY-værdien til at ændre sig - hvor SCOPE_IDENTITY() kun vil give dig den sidste identitet fra dit nuværende omfang.
Her er et eksempel, der viser forskellen mellem @@IDENTITY og SCOPE_INSERT() og hvordan de kan returnere forskellige værdier.
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
En anden mulighed, som ingen har diskuteret her, er at bruge OUTPUT-klausulen, der er i SQL 2005. I dette tilfælde skal du blot tilføje output-klausulen til din insert og derefter fange det postsæt fra din kode. Dette fungerer godt, når du indsætter flere poster i stedet for kun 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;