SELECT SCOPE_IDENTITY()
het gebruik van @@IDENTITY kan onverwachte resultaten hebben, dus wees voorzichtig met het gebruik ervan. Triggers die records invoegen in andere tabellen zullen ervoor zorgen dat de @@IDENTITY-waarde verandert - waarbij SCOPE_IDENTITY() u de laatste identiteit geeft van alleen uw huidige bereik.
Hier is een voorbeeld dat het verschil laat zien tussen @@IDENTITY en SCOPE_INSERT() en hoe ze verschillende waarden kunnen retourneren.
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
Een andere optie die niemand hier heeft besproken, is om de OUTPUT-clausule te gebruiken die in SQL 2005 zit. In dit geval hoeft u alleen de output-clausule toe te voegen aan uw insert en vervolgens die recordset uit uw code te halen. Dit werkt goed bij het invoegen van meerdere records in plaats van slechts 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;