T-SQL,在单个选择中更新多个变量

jan*_*son 45 sql t-sql sql-server

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

就像是:

set
    @variableOne = avg(someColumn),
    @variableTwo = avg(otherColumn)
    from tblTable
Run Code Online (Sandbox Code Playgroud)

对于像这项任务一样简单的事情,做两个单独的选择操作似乎有点浪费:

set @variableOne = ( select avg(someColumn) from tblTable )
set @variableTwo = ( select avg(otherColumn) from tblTable )
Run Code Online (Sandbox Code Playgroud)

Fre*_*els 97

像这样的东西:

select @var1 = avg(someColumn), @var2 = avg(otherColumn) 
from theTable
Run Code Online (Sandbox Code Playgroud)


Amy*_*y B 13

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

SELECT
  @var1 = 1,
  @var2 = 'Zeus'
Run Code Online (Sandbox Code Playgroud)

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

SELECT
  @var1 = c.Column1,
  @var2 = c.Column2,
FROM
  Customers c
WHERE c.CustomerID = @CustomerID
Run Code Online (Sandbox Code Playgroud)

注意:此代码的操作类似于while循环.

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

首选使用SET赋值而不是SELECT赋值.在考虑上述两种情况时,仅使用SELECT赋值.