94

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

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

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

在 SQL Server 中,我发现

SET @variable1 = (
SELECT col1 
FROM table1
);

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

4

2 回答 2

193
SELECT @variable1 = col1, @variable2 = col2
FROM table1
于 2009-08-27T12:32:56.690 回答
41
SELECT @var = col1,
       @var2 = col2
FROM   Table

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

  • SET 是变量赋值的 ANSI 标准,而 SELECT 不是。
  • SET 一次只能赋值一个变量,SELECT 一次可以进行多个赋值。
  • 如果从查询分配,SET 只能分配一个标量值。如果查询返回多个值/行,则 SET 将引发错误。SELECT 会将其中一个值分配给变量并隐藏返回多个值的事实(因此您可能永远不知道为什么其他地方出了问题 - 有乐趣解决那个问题)
  • 当从查询中分配时,如果没有返回值,则 SET 将分配 NULL,其中 SELECT 根本不会进行分配(因此变量不会从它的先前值更改)
  • 至于速度差异 - SET 和 SELECT 之间没有直接差异。然而,SELECT 一次完成多项任务的能力确实使其在速度上比 SET 稍有优势。
于 2009-08-27T12:33:56.643 回答