2009-06-26 82 views
4

如果我想設置表中的一個變量來現場,我通常使用類似設置一個變量從表

SELECT @UserIdToUpdate = userId FROM #NewUsers 

在這種情況下會有多種結果,我只是想第一個,這樣我試過,但它失敗,並說無效的語法頂部

SELECT @UserIdToUpdate = TOP 1 UserId FROM #NewUsers 

如果是這種情況下,我只能usethe第一個例子沒有頂部?我認爲它會取得第一個記錄?我知道這似乎是奇怪的事情,但命令是在一個循環中,所以它會選擇一個記錄,做一些事情,刪除它,然後選擇下一個。

回答

11
SELECT @UserIdToUpdate = NULL 
SELECT TOP 1 @UserIdToUpdate = userId FROM #NewUsers 

需要先聲明,因爲如果第二認定零行,那麼變量將不會在所有分配的,將保留其之前的值。

另外,

SELECT @UserIdToUpdate = (SELECT TOP 1 userId FROM #NewUsers) 

即使零行被發現,這將工作。

-3

這應該工作

SELECT @UserIdToUpdate = userId FROM #NewUsers LIMIT 1 
+0

剛剛試過,它說無效的語法接近1,我使用SQL Server 2005,如果這使得區別 – Gavin 2009-06-26 07:24:15

0
SELECT @UserIdToUpdate = (SELECT TOP 1 UserId FROM #NewUsers) 

但我相信你的第一個查詢也可以工作,如果你然後刪除這一行。並且SQL Server不應該讀取所​​有的行,但實際上應該只選擇第一個(以任意順序)

0
SELECT TOP 1 @UserIdToUpdate = UserId FROM #NewUsers