是否可以在单个选择中更新多个局部变量?
就像是:
set @variableOne = avg(someColumn), @variableTwo = avg(otherColumn) from tblTable
对于像这项任务一样简单的事情,做两个单独的选择操作似乎有点浪费:
set @variableOne = ( select avg(someColumn) from tblTable ) set @variableTwo = ( select avg(otherColumn) from tblTable )
Frederik Ghe.. 97
像这样的东西:
select @var1 = avg(someColumn), @var2 = avg(otherColumn) from theTable
Amy B.. 13
您可以使用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赋值.
像这样的东西:
select @var1 = avg(someColumn), @var2 = avg(otherColumn) from theTable
您可以使用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赋值.