【问题标题】:T-SQL, updating more than one variable in a single selectT-SQL,在一次选择中更新多个变量
【发布时间】:2009-01-22 14:26:32
【问题描述】:

是否可以在一次选择中更新多个局部变量?

类似:

set
    @variableOne = avg(someColumn),
    @variableTwo = avg(otherColumn)
    from tblTable

为这个任务这样微不足道的事情做两个单独的选择操作似乎有点浪费:

set @variableOne = ( select avg(someColumn) from tblTable )
set @variableTwo = ( select avg(otherColumn) from tblTable )

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    类似这样的:

    select @var1 = avg(someColumn), @var2 = avg(otherColumn) 
    from theTable
    

    【讨论】:

      【解决方案2】:

      您可以使用 SELECT 赋值来分配多个变量。此代码生成单行常量并将每个常量分配给一个变量。

      SELECT
        @var1 = 1,
        @var2 = 'Zeus'
      

      您甚至可以通过这种方式查询表并进行分配:

      SELECT
        @var1 = c.Column1,
        @var2 = c.Column2,
      FROM
        Customers c
      WHERE c.CustomerID = @CustomerID
      

      注意:此代码的运行类似于 while 循环。

      • 如果有多行,每一行都将分配给变量,最后一行将是剩下的那一行。如果您未指定排序,则您放弃了对哪一行将是最后一行的控制。
      • 如果没有行,则根本不会分配变量。变量不会设置为 null - 它们将保持不变。如果赋值是在循环中完成的,这是一个关键问题(通常会导致无限循环,因为变量永远不会改变)。

      优先使用 SET 分配而不是 SELECT 分配。仅在考虑上述两种情况时才使用 SELECT 分配。

      【讨论】:

        【解决方案3】:

        怎么样

        SELECT  @variableOne = avg(someColumn),  @variableTwo = avg(otherColumn) from tblTable 
        

        它对我来说很好。

        【讨论】:

          【解决方案4】:
          SELECT DISTINCT 
          @Var1 = Column1,
          @Var2 = Column2
          FROM MyTable 
          WHERE Columnx = @Parm1
          

          【讨论】:

          • 请不要只发布代码,解释你的答案。另外,这与 Amy B 10 年前发布的内容有什么不同,而且更详细?
          猜你喜欢
          • 1970-01-01
          • 2011-02-22
          • 2011-05-22
          • 2014-02-11
          • 2018-02-07
          • 1970-01-01
          • 2012-04-24
          • 2015-10-27
          • 2012-06-09
          相关资源
          最近更新 更多