265

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

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,但都没有奏效。

4

1 回答 1

534

您可以将新插入的 ID 输出到 SSMS 控制台,如下所示:

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

您也可以从例如 C# 中使用它,当您需要将 ID 取回给您的调用应用程序时 - 只需使用.ExecuteScalar()(而不是.ExecuteNonQuery()) 执行 SQL 查询以读取结果ID

或者如果您需要捕获新插入的IDT-SQL 内部(例如用于以后进一步处理),您需要创建一个表变量:

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

于 2012-06-12T15:07:29.303 回答