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

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

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

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

我试过OUPUT INSERTED.Id AS @varSET @var = INSERTED.Id ,但都没有工作。

提前致谢。

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

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

当你需要把ID返回给你的调用应用程序时,你可以使用这个方法,例如C#,只需要用.ExecuteScalar() (而不是.ExecuteNonQuery() )来执行SQL查询来读取返回的ID

或者,如果您需要在T-SQL中捕获新插入的ID (例如用于以后的进一步处理),则需要创build一个表variables:

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