在一个SELECT语句中设置两个标量变量?

58

我想要做到这个:

Declare @a int;
Declare @b int;

SET @a,@b = (SELECT StartNum,EndNum FROM Users Where UserId = '1223')

PRINT @a
PRINT @b

但这是无效的语法。我该如何在一条SELECT语句中设置多个标量变量?我可以这样做:

Declare @a int;
Declare @b int;

SET @a = (SELECT StartNum FROM Users Where UserId = '1223')
SET @b = (SELECT EndNum FROM Users Where UserId = '1223')

PRINT @a
PRINT @b

但这样做需要两倍的时间。有没有更快的方法?

3个回答

132
DECLARE @a int;
DECLARE @b int;

SELECT @a = StartNum, @b = EndNum 
FROM Users 
WHERE UserId = '1223'

很好,谢谢。我在处理SQL语法时遇到了麻烦。有许多关键字和结构可以以各种意想不到的方式使用。 - Oliver
@aF。抱歉!我分心了,忘记在12分钟的接受限制结束后检查回来了。 - Oliver

15

按照如下方式进行:

Declare @a int;
Declare @b int;

SELECT @a=StartNum,@b=EndNum FROM Users Where UserId = '1223'

PRINT @a
PRINT @b

6

如果您在存储过程中执行此操作,并且不希望选择结果在输出结果集中,您需要使用“INTO”关键字。

Declare @a int;
Declare @b int;

SELECT StartNum, EndNum 
FROM Users 
Where UserId = '1223'
INTO @a, @b;

它还可以这样使用:
SELECT StartNum, EndNum 
INTO @a, @b
FROM Users 
Where UserId = '1223';

3
我在 SQL Server 数据库上尝试了这里描述的两种方法,但都没有成功。警告任何想以这种方式尝试的人。 - Ethan Conner
@EthanConner,自从我发布这个问题以来已经很久了,但它曾经可以运行,将值存储在变量中以供存储过程后面的部分使用,而不将它们推送到输出中,你有遇到任何具体的错误吗? - rvazquezglez
1
“Invalid syntax near 'into'”或类似的错误。SQL Server不允许我使用那种格式,但“select @a = column_a”的格式可以正常工作。 - Ethan Conner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接