Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

obtenir un nouvel ID d'enregistrement SQL

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;