305 votes

Comment utiliser la clause OUTPUT d'une instruction INSERT pour obtenir la valeur d'identité?

Si j'ai une déclaration insert telle que:

 INSERT INTO MyTable
(  
  Name,
  Address,
  PhoneNo
)
VALUES
(
  'Yatrix',
   '1234 Address Stuff',
   '1112223333'
)
 

Comment définir @var INT sur la valeur d'identité de la nouvelle ligne (appelée Id ) à l'aide de la clause OUTPUT? J'ai vu des exemples d'insertion de INSERTED.Name dans des variables de table, par exemple, mais je ne peux pas l'obtenir dans une variable non-table.

J'ai essayé OUPUT INSERTED.Id AS @var , SET @var = INSERTED.Id , mais je n'ai jamais travaillé.

Merci d'avance.

605voto

marc_s Points 321990

Vous pouvez avoir le nouveau ID inséré en cours de sortie de la SSMS console comme ceci:

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Vous pouvez l'utiliser aussi, par exemple, le C#, lorsque vous avez besoin pour obtenir l'ID de retour à votre application appelante - il suffit d'exécuter la requête SQL avec .ExecuteScalar() (au lieu de .ExecuteNonQuery()) pour lire le résultant ID de retour.

Ou si vous avez besoin pour capturer le nouvellement inséré ID à l'intérieur de T-SQL (par exemple pour traitement ultérieur), vous devez créer une variable de table:

DECLARE @OutputTbl TABLE (ID INT)

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

De cette façon, vous pouvez mettre plusieurs valeurs en @OutputTbl et de poursuivre leur traitement. Vous pouvez également utiliser un "régulier" de la table temporaire (#temp) ou même d'une "vraie" table persistance que votre sortie "cible" ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X