2011-04-05 70 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