2009-06-26 59 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