我正在将SQL从Teradata转换为SQL Server
在Teradata中,它们具有以下格式
SELECT col1, col2
FROM table1
INTO @variable1, @variable2
在SQL Server中,我发现
SET @variable1 = (
SELECT col1
FROM table1
);
那每个语句只允许一个列/变量。如何使用单个SELECT语句分配2个或更多变量?
Answers:
SELECT @variable1 = col1, @variable2 = col2
FROM table1
SELECT @var = col1,
@var2 = col2
FROM Table
这是一些有关SET / SELECT的有趣信息
- SET是用于变量分配的ANSI标准,而SELECT不是。
- SET一次只能分配一个变量,SELECT可以一次进行多个分配。
- 如果从查询分配,SET只能分配标量值。如果查询返回多个值/行,则SET将引发错误。SELECT会将值之一分配给变量,并隐藏返回了多个值的事实(因此您很可能永远都不知道为什么其他地方出了问题-有趣地对其中一个进行故障排除)
- 从查询分配时,如果没有返回值,则SET将分配NULL,而SELECT根本不会进行赋值(因此该变量将不会从其先前的值更改)
- 至于速度差异-SET和SELECT之间没有直接差异。但是,SELECT一次完成多个任务的能力确实使其速度比SET稍有优势。