动态where子句基于变量

Ben*_*Ben 2 sql t-sql

我正在使用SQL中的select语句,并且遇到了尝试创建包含case语句或if else语句的where子句的问题.我想根据变量的值选择记录.如果变量为"True",则仅返回列为null的select语句中的记录.如果变量不是"True",则返回所有记录,无论该列是否为空.

关于如何做到这一点的任何提示?

以下是我想要做的一个简单示例:

declare @option1 as varchar(5)

--This can be True or False so to test i just put the Set option below
set @option1 = 'True'

Select a,b,c,d...
from ...
where d = case when @option1 = 'True' then NULL End
Run Code Online (Sandbox Code Playgroud)

这是我不知道该怎么做的部分.如果变量为"True",我只需要过滤掉记录,因此不确定在案例的else部分放置什么.

Pin*_*nyM 9

您不能d = NULL像CASE语句那样进行测试,因为它总是返回false,因为NULL不等于NULL(除非您将ANSI_NULLS设置为'off').

最简单的方法是将WHERE子句更改为:

WHERE @option1 = 'False' OR d IS NULL
Run Code Online (Sandbox Code Playgroud)

如果您出于某种原因更喜欢使用CASE语句,可以这样写:

WHERE 1 = CASE WHEN @option1 = 'False' THEN 1 
               WHEN @option1 = 'True' AND d IS NULL THEN 1 
               ELSE 0 
          END
Run Code Online (Sandbox Code Playgroud)