2009-01-22 78 views
33

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

喜欢的东西:

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

这似乎有点浪费,使两个独立的选择操作的微不足道,因为这任务的内容:

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

回答

78

事情是这样的:

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

完美,谢谢! – jandersson 2009-01-22 14:30:03

1

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

它适用于我很好。

9

您可以使用SELECT分配来分配多个变量。该代码生成一行常量并将其分配给一个变量。

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

你甚至可以查询表,做任务这样:

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

请注意:此代码的运作就像一个while循环。

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

首选使用SET分配通过SELECT分配。考虑上述两种情况时,只能使用SELECT分配。