2

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

假设您有一个包含以下内容的表(referredby 是可选的,因此可以为 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)

如果我将参数保留为空,则只会返回:
1 Aaron
3 Steven

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

4

2 回答 2

4

试试这个:

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

由于这篇文章中解释的原因,在 sql server中进行比较null = null会返回 false(或未知)。一样null != null

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

于 2012-06-18T23:43:11.903 回答
1

在您的查询中添加这一行:

SELECT ... FROM ... --other codes here
where (referredby = @referredby) OR (@referredby IS NULL)
于 2012-06-18T23:44:15.200 回答