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

AKM*_*AKM 4 sql t-sql sql-server-2005

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

假设您有一个包含以下内容的表(referredby 是可选的,因此可以为 NULL):

Customertable
ID    CustomerName  ReferredBy
1      Aaron         Joe
2      Peter         NULL
3      Steven        Joe
Run Code Online (Sandbox Code Playgroud)

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

declare @referredby as varchar(15)

select id, customername
from customertable<br>
where referredby = isnull(@referredby, referredby)
Run Code Online (Sandbox Code Playgroud)

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

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

Abe*_*ler 6

尝试这个:

select id, customername
from customertable
where (referredby = @referredby OR @referredby is null)
Run Code Online (Sandbox Code Playgroud)

由于本文中解释的原因,null = null在 sql server 中进行比较会返回 false(或未知)。正如null != null

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