创建一个T-sQL where子句来接受NULL值

时间:2011-04-18 16:28:18

标签: tsql null where

现在我正在开发一个存储过程,它接受3个输入参数。但挑战是客户不必输入任何这些参数;他们可能会将这3个作为空值。如何将其写入WHERE子句?

伪代码就像:

WHERE (@p1 = a.p1 or @p1 = '') 
and (@p2 = a.p2 or @p2 = '') 
and (@p2 = a.p2 or @p2 = '')

上述逻辑在选择所有3个参数时有效,否则返回0个记录。

3 个答案:

答案 0 :(得分:4)

看起来你正在检查空白/空字符串(意思是'跳过这个')。如果变量也可以为空,则可以使用ISNULL(x,'')强制将null参数转换为空字符串。

 WHERE (@p1 = a.p1 or ISNULL(@p1,'') = '')
 AND (@p2 = a.p2   or ISNULL(@p2,'') = '') 
 AND (@p2 = a.p2   or ISNULL(@p2,'') = '')

答案 1 :(得分:1)

试试这个:

  WHERE (@p1 = a.p1 or @p1 = '' OR @p1 IS NULL) 
    AND (@p2 = a.p2 or @p2 = '' OR @p2 IS NULL) 
    AND (@p2 = a.p2 or @p2 = '' OR @p3 IS NULL)

答案 2 :(得分:1)

您应该将查询更改为以下内容:

WHERE (a.p1 = IsNull(NullIf(@p1, ''), a.p1))  
  and (a.p2 = IsNull(NullIf(@p2, ''), a.p2))
  and (a.p3 = IsNull(NullIf(@p3, ''), a.p3))