如果我有一个插入语句,例如:
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
,但两项都没有效果。
答案 0 :(得分:414)
您可以将新插入的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
)甚至“真实”持久表作为“输出目标”。