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

标签 sql tsql sql-server-2005

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

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

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

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

declare @referredby as varchar(15)

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

如果我将参数保留为空,这只会返回:
1 亚伦
3 史蒂文

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

最佳答案

试试这个:

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

关于带有可选参数和可能的空列的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11092576/

相关文章:

mysql - 使用 INNER JOIN 按日期范围接收交叉数据

sql - MYSQL 附加日期时如何按日期 desc 排序?

sql-server - 在架构内创建多个 View - SQL Server

sql-server - 安装 SQL Server Business Intelligence Development Studio

sql-server-2005 - 需要从SQL Server以CSV格式导出包含换行符的字段

sql-server - SQL Server IN 与 EXISTS 性能

sql - 从触发器插入没有发生?

sql - Postgre按数量间隔分组

sql-server - 在 SQL Server 中循环月份

c# - 为什么 SQL Server 2008 及更高版本不支持派生自泛型的 CLR 类型?