如果我想将变量设置为表格中的字段,我通常使用类似
的字符SELECT @UserIdToUpdate = userId FROM #NewUsers
在这种情况下会有多个结果,我只想要第一个,所以我尝试了这个,但它失败并说无效的语法顶部
SELECT @UserIdToUpdate = TOP 1 UserId FROM #NewUsers
如果是这种情况,我可以使用没有顶部的第一个例子吗?我想它只会拿第一张唱片?我知道这似乎是奇怪的事情,但命令是在循环中所以它将选择一个记录,用它做一些事情,删除它然后选择下一个。
答案 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);
答案 4 :(得分:-3)
这应该有效
SELECT @UserIdToUpdate = userId FROM #NewUsers LIMIT 1