如果我有一个插入语句,例如:
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
如何使用 OUTPUT 子句将 @var INT
设置为新行的标识值(称为 Id
)?例如,我已经看到将 INSERTED.Name 放入表变量的示例,但我无法将其放入非表变量中。
我试过 OUPUT INSERTED.Id AS @var
、SET @var = INSERTED.Id
,但都没有奏效。
OUTPUT
子句分配给标量变量。
OUTPUT
子句写入表。它可以是表变量,临时表,...。
您可以将新插入的 ID 输出到 SSMS 控制台,如下所示:
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
您也可以从例如 C# 中使用它,当您需要将 ID 取回调用应用程序时 - 只需使用 .ExecuteScalar()
(而不是 .ExecuteNonQuery()
)执行 SQL 查询以读取结果 ID
。
或者,如果您需要在 T-SQL 中捕获新插入的 ID
(例如,以供以后进一步处理),则需要创建一个表变量:
DECLARE @OutputTbl TABLE (ID INT)
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
这样,您可以将多个值放入 @OutputTbl
并对其进行进一步处理。您还可以在此处使用“常规”临时表 (#temp
) 甚至“真实”持久表作为“输出目标”。
不定期副业成功案例分享
real persistent table
中插入结果 - 这非常棒,因为这意味着您可以同时在TWO
表中INSERT
信息。SCOPE_IDENTITY()
对此效果更好。