SQL SELECT多列INTO多变量


85

我正在将SQL从Teradata转换为SQL Server

在Teradata中,它们具有以下格式

SELECT col1, col2
FROM table1
INTO @variable1, @variable2

在SQL Server中,我发现

SET @variable1 = (
SELECT col1 
FROM table1
);

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

Answers:


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

与多个SELECT相比,这样做是否会提高性能/速度?
Shankar Nathan

8
真正的答案是对其进行测试并亲自观察。非正式答案当然是肯定的。
underscore_d

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

这是一些有关SET / SELECT的有趣信息

  • SET是用于变量分配的ANSI标准,而SELECT不是。
  • SET一次只能分配一个变量,SELECT可以一次进行多个分配。
  • 如果从查询分配,SET只能分配标量值。如果查询返回多个值/行,则SET将引发错误。SELECT会将值之一分配给变量,并隐藏返回了多个值的事实(因此您很可能永远都不知道为什么其他地方出了问题-有趣地对其中一个进行故障排除)
  • 从查询分配时,如果没有返回值,则SET将分配NULL,而SELECT根本不会进行赋值(因此该变量将不会从其先前的值更改)
  • 至于速度差异-SET和SELECT之间没有直接差异。但是,SELECT一次完成多个任务的能力确实使其速度比SET稍有优势。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.