Sql 选择基于目标表中NULL失败的可选条件的查询
测试架构:Sql 选择基于目标表中NULL失败的可选条件的查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,测试架构: create table users ( id int primary key identity(1,1), firstname varchar(50), lastname varchar(50) ); insert into users (firstname, lastname) values ('John', 'Doe'), ('Jane', 'Doe'); 现在我们有下表 | id | firstname | lastname | +----+--
create table users
(
id int primary key identity(1,1),
firstname varchar(50),
lastname varchar(50)
);
insert into users (firstname, lastname)
values ('John', 'Doe'), ('Jane', 'Doe');
现在我们有下表
| id | firstname | lastname |
+----+-----------+----------+
| 1 | John | Doe |
| 2 | Jane | Doe |
我试图做的是将一组可选参数传递到存储过程中,并基于此从表中进行选择。默认情况下,该参数将为NULL,以指示该条件不是必需的
现在,我为名为“John”的所有用户选择查询
declare @fn varchar(50) = 'John';
declare @ln varchar(50) = NULL;
select *
from users
where firstname = isnull(@fn, firstname)
and lastname = isnull(@ln, lastname);
当目标表中的一列本身为空时,它失败。然后它进入NULL=NULL
案例,并且不返回该行。例如,如果我用id=1
更新行,使表如下所示
| id | firstname | lastname |
+----+-----------+----------+
| 1 | John | NULL |
| 2 | Jane | Doe |
然后查询就失败了。我正在使用SQL Server 2016。使用:
where (firstname = @fn or @fn is null) and
(lastname = @ln or @ln is null)
@rn
应该是@fn
@Sheldore。非常感谢。