从表中设置变量

时间:2009-06-26 07:20:44

标签: sql-server

如果我想将变量设置为表格中的字段,我通常使用类似

的字符
SELECT @UserIdToUpdate = userId FROM #NewUsers

在这种情况下会有多个结果,我只想要第一个,所以我尝试了这个,但它失败并说无效的语法顶部

SELECT @UserIdToUpdate = TOP 1 UserId FROM #NewUsers

如果是这种情况,我可以使用没有顶部的第一个例子吗?我想它只会拿第一张唱片?我知道这似乎是奇怪的事情,但命令是在循环中所以它将选择一个记录,用它做一些事情,删除它然后选择下一个。

5 个答案:

答案 0 :(得分:14)

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

需要第一个语句,因为如果第二个语句找到零行,那么该变量根本不会被赋值,并且将保留其先前值。

可替换地,

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

即使找到零行也会有效。

答案 1 :(得分:0)

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

但我相信你的第一个查询也会有效,如果你删除这一行。并且SQL Server不应该读取所​​有行,但实际上应该只选择第一行(按任意顺序)

答案 2 :(得分:0)

SELECT TOP 1 @UserIdToUpdate = UserId FROM #NewUsers

答案 3 :(得分:0)

我们也可以使用SET语句:

DECLARE @UserIdToUpdate int;  
SET @UserIdToUpdate = (SELECT TOP 1 userId FROM #NewUsers);

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-local-variable-transact-sql?view=sql-server-2017

答案 4 :(得分:-3)

这应该有效

SELECT @UserIdToUpdate = userId FROM #NewUsers LIMIT 1