Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择基于目标表中NULL失败的可选条件的查询_Sql_Sql Server_Tsql - Fatal编程技术网

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。非常感谢。