【问题标题】:SQL SELECT multi-columns INTO multi-variableSQL SELECT 多列 INTO 多变量
【发布时间】:2010-11-23 08:52:40
【问题描述】:

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

在 Teradata 中,它们的格式为

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

在 SQL Server 中,我找到了

SET @variable1 = (
SELECT col1 
FROM table1
);

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

【问题讨论】:

    标签: sql sql-server teradata


    【解决方案1】:
    SELECT @variable1 = col1, @variable2 = col2
    FROM table1
    

    【讨论】:

    • 与多个 SELECT 相比,这样做会提高性能/速度还是一样?
    • 真正的答案是自己测试一下。非正式的回答是肯定的,当然,可能。
    【解决方案2】:
    SELECT @var = col1,
           @var2 = col2
    FROM   Table
    

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

    • SET 是变量赋值的 ANSI 标准,而 SELECT 不是。
    • SET 一次只能分配一个变量,SELECT 可以使多个 一次完成任务。
    • 如果从查询中分配,SET 只能分配一个标量值。如果 查询返回多个值/行 然后 SET 将引发错误。选择 将其中一个值分配给 变量并隐藏以下事实 返回了多个值(所以 你可能永远不知道为什么 其他地方出了问题 - 玩得开心 排除故障)
    • 从查询分配时,如果没有返回值,则 SET 将 分配 NULL,其中 SELECT 不会 完成任务(所以 变量不会从它的 以前的值)
    • 就速度差异而言 - SET 之间没有直接差异 和选择。然而 SELECT 的能力 将多项任务合二为一 射击确实给了它轻微的速度 优于 SET。

    【讨论】:

    • 第四个要点是一个特别重要的区别,因为至少对我而言,这种行为不是您所期望的;我记得在调试一个使用选择在光标内分配变量的脚本时发现这一点很困难,我会让你猜剩下的......
    猜你喜欢
    • 2012-11-30
    • 2019-03-14
    • 2011-04-19
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2012-01-23
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多