在union语句中更改T-SQL变量

时间:2014-06-06 13:11:35

标签: sql variables select union

我想将一个变量值从union语句的一部分更改为另一部分:

e.g。

USE db1
DECLARE @x int;
set @x = 5;
SELECT * FROM  [db1].[Schema1].[table1]
where intCol1 <= @x
UNION
--set @x = 10;  -- doesn't allow me to change variable here
SELECT * FROM  [db1].[Schema1].[table1]
where intCol1 <= @x

-- in this case a work-around would be to use where intCol1 <= (2 * @x) in the last line.

但是如果你不能改变它们,那么变量的重点是什么?

是否需要更改变量以在select语句的不同部分中具有不同的值,或者这本质上是不可能的?

由于所有数字&lt; 5也是&lt; 10,我意识到答案是相同的,如果你只做一个单词SELECT与intCol1&lt; =(2 * @x) 但是,这是一个更大的查询方案的简化版本......

提前感谢您的关注

2 个答案:

答案 0 :(得分:2)

如果您正在运行多个步骤,则可以更改它们之间的变量,但不会以步进方式执行UNION语句。

答案 1 :(得分:2)

您无法以这种方式更改SELECT内部的变量,因为作为该语句的一部分发生的计算没有顺序。 SQL Server可以先执行第二个分支。允许这样的事情将是一个非常令人困惑的编程模型。

SELECT是您想要的数据的规范。 如何检索该数据的规范,使用什么访问方法的顺序。

SELECT是一个功能程序。您不能将状态修改为选择的一部分。这是一件非常好的事情。

使用两个变量。