2011-04-05 36 views

回答

109

您需要一个表变量,它可以是这么简单。

declare @ID table (ID int) 

insert into MyTable2(ID) 
output inserted.ID into @ID 
values (1) 
+17

但后来我不得不“从@ID选择@someInt = ID”。我想知道是否有可能跳过额外的步骤(和中间表变量),如果我需要的只是结果int。 – Benoittr 2011-04-05 21:33:46

+0

@Benoittr - 这取决于你将如何使用该值,它可能不是必需的,你可以在select语句的from子句中使用该表。当您分配一个变量时,您还需要确保插入仅插入一行。如果插入只插入一行,也许更容易直接获取value子句中使用的内容而不是使用'output'? – 2011-04-05 21:42:46

+1

在自动生成值的情况下,并不总是可以提前知道这些值(标识,计算列)。我知道有很多解决方法。不过,你给了我我正在寻找的答案。谢谢 – Benoittr 2011-04-06 20:56:03

20

过了一年之后...如果你需要的是获得自动生成的表的ID,你可以

SELECT @ReportOptionId = SCOPE_IDENTITY() 

否则,就好像你被卡住使用表。

+5

我正在寻找的变量确实是标识列的其他内容。不过,谢谢你的答案。 – Benoittr 2012-08-24 17:39:18

+11

显然,这在多处理器并行计划中存在问题,并且OUTPUT是唯一始终值得信赖的方法。 – andrewb 2014-03-10 03:18:36

+4

即使* last * INSERT没有插入任何内容,SCOPE_IDENTITY()可能会返回一些内容,对吗?这会在某些情况下无法使用。 – 2015-01-28 11:07:23