SQL SELECT多列 INTO多变量

115
我正在将Teradata的SQL转换为SQL Server的SQL。在Teradata中,他们有以下格式:
SELECT col1, col2
FROM table1
INTO @variable1, @variable2

在SQL Server中,我发现

SET @variable1 = (
SELECT col1 
FROM table1
);

每个语句只允许一个列/变量。如何在单个SELECT语句中分配2个或更多变量?

2个回答

214
SELECT @variable1 = col1, @variable2 = col2
FROM table1

这样做与多个SELECT相比,能提高性能/速度吗?还是一样的? - shanq.eth
12
真正的答案是测试并亲自尝试。非正式的回答是肯定的,当然,很可能是这样的。 - underscore_d

53
SELECT @var = col1,
       @var2 = col2
FROM   Table

以下是关于SET / SELECT的一些有趣信息:

  • SET是变量赋值的ANSI标准,而SELECT不是。
  • SET每次只能赋值一个变量,而SELECT可以一次性进行多个赋值操作。
  • 如果从查询中进行赋值,SET只能赋予标量值。如果查询返回多个值/行,则SET会引发错误。SELECT将其中一个值分配给变量,并隐藏了返回多个值的事实(因此您可能永远不会知道为什么其他地方出了问题 - 祝您调试愉快)。
  • 当从查询中进行赋值时,如果没有返回值,SET将分配NULL值,而SELECT根本不会进行赋值操作(因此变量的值将与其先前的值相同)。
  • 就速度差异而言 - SET和SELECT之间没有直接的区别。但是,SELECT一次性进行多个赋值操作的能力确实使它在速度上略胜一筹。

2
第四个要点是一个特别重要的区别,因为在我的看法中,这种行为并不是你所期望的。我记得当我调试一个脚本时,在游标内部使用select语句赋值变量时,我是通过艰难的方式发现了这一点,我会让你来猜测其余部分... - Christopher King

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