Comment get le champ Identité résultant d'un insert?

Je vais insert des données dans une table comme ceci:

Insert Into MyTable (Field1, Field2) Values ('test', 5) 

Lorsque cette insertion se produit, la nouvelle ligne va avoir une valeur d'identification dans la colonne ID . Si j'ai une variable appelée @ID dans mon code T-SQL, comment puis-je renseigner @ID avec le résultat de l'insertion T-SQL?

 Declare @ID int Insert into MyTable (Field1, Field2) Values ('test', 5) --//How do I populate @ID with the value of ID of the record that was just inserted? 

Il y a deux façons – la première est d'utiliser SCOPE_IDENTITY :

 DECLARE @ID INT INSERT INTO MyTable (Field1, Field2) VALUES ('test', 5) SELECT @ID = SCOPE_IDENTITY() 

N'utilisez pas @@ IDENTITY – la valeur qu'il contient correspond à la dernière colonne IDENTITY mise à jour sans tenir count de la scope. Ce qui signifie, qu'il n'est pas fiable qu'il contient la valeur pour votre INSERT, mais SCOPE_IDENTITY fait.

L'autre alternative consiste à utiliser la clause OUTPUT (SQL Server 2005+).

 SELECT @ID = SCOPE_IDENTITY(); 

Vous devriez utiliser scope_identity dans votre cas.

Il y a différentes façons d'get la dernière identité insérée et ils diffèrent dans la façon dont ils fonctionnent juste pour vos informations les listant –

  1. @@IDENTITÉ

  2. SCOPE_IDENTITY ()

  3. IDENT_CURRENT

  4. CLAUSE DE SORTIE (est venu à savoir à partir de @OMG Ponies réponse)

Considérez les différences et les comparaisons entre eux avant de décider lequel utiliser.