使用BIT数据类型过滤WHERE子句中的查询

Iga*_*man 3 sql sql-server null

我正在构建一个使用位参数的存储过程.此位参数用于过滤电子邮件列.

如果@param为1 - 显示所有有电子邮件的客户.

如果@param为0 - 显示没有电子邮件的所有客户端.

如果@param为null(未传递给过程) - 显示有和没有电子邮件的客户端.

那不太好.有什么建议吗?

where case @email when 1 then email is not null
                 when 0 then email is null)
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 5

使用简单OR:

WHERE (@param IS NULL)
   OR (@param = 1 AND email IS NOT NULL)
   OR (@param = 0 AND email IS NULL)
Run Code Online (Sandbox Code Playgroud)