SELECT SCOPE_IDENTITY()
Die Verwendung von @@IDENTITY kann zu unerwarteten Ergebnissen führen, seien Sie also vorsichtig, wie Sie diese verwenden. Trigger, die Datensätze in andere Tabellen einfügen, bewirken, dass sich der @@IDENTITY-Wert ändert – wobei SCOPE_IDENTITY() Ihnen die letzte Identität nur aus Ihrem aktuellen Bereich gibt.
Hier ist ein Beispiel, das den Unterschied zwischen @@IDENTITY und SCOPE_INSERT() zeigt und wie sie unterschiedliche Werte zurückgeben können..
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
Eine weitere Option, die hier noch niemand besprochen hat, ist die Verwendung der OUTPUT-Klausel in SQL 2005. In diesem Fall müssten Sie nur die Ausgabeklausel zu Ihrer Einfügung hinzufügen und dann dieses Recordset aus Ihrem Code abfangen. Dies funktioniert gut, wenn Sie mehrere Datensätze anstelle von nur 1 einfügen ...
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;