select查询在目标表中为null时失败

ru9i0ody  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(321)

测试架构:

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 把table弄成这样

| id | firstname | lastname |
+----+-----------+----------+
| 1  | John      | NULL     |
| 2  | Jane      | Doe      |

然后查询就失败了。我正在使用sql server 2016。

bqjvbblv

bqjvbblv1#

用途:

where (firstname = @fn or @fn is null) and
      (lastname = @ln or @ln is null)

相关问题