如何使用INSERT语句的OUTPUT子句获取标识值?

时间:2012-06-12 15:03:49

标签: sql sql-server-2005 insert

如果我有一个插入语句,例如:

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

如何使用OUTPUT子句将@var INT设置为新行的标识值(称为Id)?例如,我已经看过将INSERTED.Name放入表变量的示例,但我无法将其转换为非表变量。

我已尝试OUPUT INSERTED.Id AS @varSET @var = INSERTED.Id,但两项都没有效果。

1 个答案:

答案 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)甚至“真实”持久表作为“输出目标”。