sql - 如何有条件地将 AND 条件添加到 SQL Server 中的 WHERE 子句

标签 sql sql-server

我有一个具有以下架构的表:

| ID | BUNDLE_ID | IS_ADMIN |

我需要根据某些标准从上表中选择具有 AND 子句的数据,即

IF @FLAG = 1
    SELECT * 
    FROM TABLE A 
    WHERE A.IS_ADMIN = 1 AND BUNDLE_ID IN (3, 5)
ELSE
    SELECT * 
    FROM TABLE A 
    WHERE A.IS_ADMIN = 1 AND BUNDLE_ID IN (1, 2)

我可以通过单个查询实现此目的吗?

最佳答案

一般方法是使用 bool 表达式重写查询,该表达式根据标志的值计算出您需要的内容:

SELECT * FROM TABLE A WHERE A.IS_ADMIN = 1 AND ( -- Common part ...
    (@Flag=1  AND BUNDLE_ID IN(3,5))     -- IF   ...
OR
    (@Flag<>1 AND BUNDLE_ID IN(1,2))     -- ELSE ...
)

关于sql - 如何有条件地将 AND 条件添加到 SQL Server 中的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399488/

相关文章:

mysql - MySQL 中的 'Cartesian' 是什么?

sql - 更改名称中有空格的表

c# - 什么是 sql 版本 662?

mysql - 使用(my)sql 中的两个 sql 表实现此目的的查询是什么?

sql-server - 从另一个数据存储更新网站上的数据库

c# - 不允许从数据类型 nvarchar 到二进制的隐式转换。使用 CONVERT 函数运行此查询。

sql - 允许在 SQL 查询中使用 *

mysql - 如何删除外键字段?

c# - 离线复制数据库模式

sql-server - 存储过程返回多个表,但 EF 仅使用唯一的第一个数据表结果创建单个结果集