我正在将 SQL 从 Teradata 转换为 SQL Server
在 Teradata 中,它们具有以下格式
SELECT col1, col2
FROM table1
INTO @variable1, @variable2
在 SQL Server 中,我发现
SET @variable1 = (
SELECT col1
FROM table1
);
每个语句只允许一个列/变量。如何使用单个 SELECT 语句分配 2 个或更多变量?
我正在将 SQL 从 Teradata 转换为 SQL Server
在 Teradata 中,它们具有以下格式
SELECT col1, col2
FROM table1
INTO @variable1, @variable2
在 SQL Server 中,我发现
SET @variable1 = (
SELECT col1
FROM table1
);
每个语句只允许一个列/变量。如何使用单个 SELECT 语句分配 2 个或更多变量?
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 稍有优势。