现在我正在开发一个存储过程,它接受3个输入参数。但挑战是客户不必输入任何这些参数;他们可能会将这3个作为空值。如何将其写入WHERE子句?
伪代码就像:
WHERE (@p1 = a.p1 or @p1 = '')
and (@p2 = a.p2 or @p2 = '')
and (@p2 = a.p2 or @p2 = '')
上述逻辑在选择所有3个参数时有效,否则返回0个记录。
答案 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))