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 aucun n'a fonctionné.
Vous pouvez soit avoir le nouvel ID inséré en sortie sur la console SSMS comme ceci:
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
Vous pouvez aussi utiliser ceci, par exemple. C #, lorsque vous devez récupérer l'ID dans votre application appelante, exécutez simplement la requête SQL avec .ExecuteScalar()
(au lieu de .ExecuteNonQuery()
) pour lire le résultat ID
.
Ou si vous devez capturer la ID
nouvellement insérée dans T-SQL (par exemple, pour un 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 dans @OutputTbl
et les traiter ultérieurement. Vous pouvez également utiliser une table temporaire "normale" (#temp
) ou même une table "réelle" persistante comme "cible de sortie" ici.