带有可选参数和可能的空列的SQL查询

时间:2012-06-18 23:40:31

标签: sql tsql sql-server-2005

在将包含空值的列上的可选sql参数留空时,我将无法返回所有结果。

想象一下,你有一个包含以下内容的表(推荐是可选的,因此可以为NULL):

Customertable
ID    CustomerName  ReferredBy
1      Aaron         Joe
2      Peter         NULL
3      Steven        Joe

假设我想使用可选的SQL参数查询所引用的字段,如:

declare @referredby as varchar(15)

select id, customername
from customertable<br>
where referredby = isnull(@referredby, referredby)

如果我将参数保留为null,则只返回:
1 Aaron
3史蒂文

如何使用可选参数返回所有3个结果?

2 个答案:

答案 0 :(得分:4)

试试这个:

select id, customername
from customertable
where (referredby = @referredby OR @referredby is null)

由于explained in this post的原因,在sql server中比较null = null会返回false(或未知)。和null != null一样。

如果你真的喜欢你的语法,我相信你可以通过将ansi_Nulls设置为关闭来使其工作:set ansi_nulls off

答案 1 :(得分:1)

在您的查询中添加以下内容:

SELECT ... FROM ... --other codes here
where (referredby = @referredby) OR (@referredby IS NULL)