我想将一个变量值从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) 但是,这是一个更大的查询方案的简化版本......
提前感谢您的关注
答案 0 :(得分:2)
如果您正在运行多个步骤,则可以更改它们之间的变量,但不会以步进方式执行UNION
语句。
答案 1 :(得分:2)
您无法以这种方式更改SELECT内部的变量,因为作为该语句的一部分发生的计算没有顺序。 SQL Server可以先执行第二个分支。允许这样的事情将是一个非常令人困惑的编程模型。
SELECT
是您想要的数据的规范。 不 如何检索该数据的规范,使用什么访问方法的顺序。
SELECT
是一个功能程序。您不能将状态修改为选择的一部分。这是一件非常好的事情。
使用两个变量。