SELECT SCOPE_IDENTITY()
l'utilisation de @@IDENTITY peut avoir des résultats inattendus, alors faites attention à la façon dont vous l'utilisez. Les déclencheurs qui insèrent des enregistrements dans d'autres tables entraîneront la modification de la valeur @@IDENTITY - où SCOPE_IDENTITY() vous donnera la dernière identité uniquement à partir de votre portée actuelle.
Voici un exemple qui montrera la différence entre @@IDENTITY et SCOPE_INSERT() et comment ils peuvent renvoyer des valeurs différentes..
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
Une autre option dont personne n'a discuté ici consiste à utiliser la clause OUTPUT qui se trouve dans SQL 2005. Dans ce cas, vous n'avez qu'à ajouter la clause de sortie à votre insertion, puis attraper ce jeu d'enregistrements à partir de votre code. Cela fonctionne bien lors de l'insertion de plusieurs enregistrements au lieu d'un seul...
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;