sql - 在联合语句中更改 T-SQL 变量

标签 sql variables select union

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

例如

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/

相关文章:

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 将我的存储过程上传到数据库时出错

Java:跨类传递变量

variables - 在 Fortran 中确定变量类型

c# - 如何在 if 语句之外使用已在 if 语句内声明的变量

MySQL:如果存在则获取 ID,否则插入并返回 ID

python - 关于 python select.select 调用的返回值

MySQL 将行转为动态数量的列

sql - 如何(自动)生成动态查询的更新查询?

mysql - 如何获取一组按字段排序的数据,但空值应该稍后出现并按不同的条件排序?