首页 > 解决方案 > 有条件地设置 SQL 中的 AND/OR 运算符

问题描述

我有以下选择查询:

SELECT * FROM Table1
WHERE condition1 AND condition2 AND condition3 AND/OR condition4

我想在AND/OR这里设置基于另一个变量,例如DECLARE @Operator [nvarchar](max) = 'AND'. 如果@Operator是“AND”,则此处的运算符将是AND,并且与“OR”类似。

有什么好的方法吗?

标签: sqlsql-server

解决方案


我要么动态构造 SQL 语句,要么使用如下语句:

DECLARE @AndOperator BIT = 0; --set to 1 to use AND instead of OR
SELECT * FROM Table1
WHERE
  ((@AndOperator = 0 AND (condition1 AND condition2 AND condition3 OR  condition4)) OR
   (@AndOperator = 1 AND (condition1 AND condition2 AND condition3 AND condition4)))

根据逻辑结构,可能会进行其他简化。

在这种情况下,我更喜欢使用动态 SQL,但上面的语句可以在存储过程中使用。


推荐阅读