我想将变量值从联合语句的一部分更改为另一部分:
例如
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 语句的不同部分具有不同的值,或者这在本质上是不可能的?
因为所有 < 5 的数字也 < 10,我意识到如果你只用 where intCol1 <= ( 2* @x) 做一个单一的选择,答案是一样的 然而,这是一个更大的查询方案的简化版本......
提前感谢您的关注
最佳答案
您不能以这种方式更改 SELECT 内部的变量,因为作为该语句的一部分发生的计算没有顺序。 SQL Server 可以先执行第二个分支。允许这样的事情将是一个非常困惑的编程模型。
SELECT
是您想要的数据的规范。它不是关于如何检索该数据、以何种顺序使用何种访问方法的规范。
SELECT
是一个函数式程序。您不能将状态作为选择的一部分进行修改。这是一件非常好的事情。
使用两个变量。
关于sql - 在联合语句中更改 T-SQL 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082700/