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

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

如何使用OUTPUT子句将@var INT设置为新行的标识值(称为Id) ?我看过一些插入的例子。例如,把它放到表变量中,但是我不能把它放到非表变量中。

我已经尝试输出插入。Id为@var, SET @var =插入。我想,但都没用。


当前回答

你可以像这样将新插入的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),甚至一个“真正的”持久表作为这里的“输出目标”。

其他回答

你可以像这样将新插入的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),甚至一个“真正的”持久表作为这里的“输出目标”。