测试架构:
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。
1条答案
按热度按时间bqjvbblv1#
用途: