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

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

测试架构:

  1. create table users
  2. (
  3. id int primary key identity(1,1),
  4. firstname varchar(50),
  5. lastname varchar(50)
  6. );
  7. insert into users (firstname, lastname)
  8. values ('John', 'Doe'), ('Jane', 'Doe');

现在我们有下表

  1. | id | firstname | lastname |
  2. +----+-----------+----------+
  3. | 1 | John | Doe |
  4. | 2 | Jane | Doe |

我要做的是将一组可选参数传递到存储过程中,并基于此从表中进行选择。默认情况下,该参数将为null,表示不需要该条件。
现在我为所有名为“john”的用户选择查询

  1. declare @fn varchar(50) = 'John';
  2. declare @ln varchar(50) = NULL;
  3. select *
  4. from users
  5. where firstname = isnull(@fn, firstname)
  6. and lastname = isnull(@ln, lastname);

失败的地方是目标表中的列本身为空。然后它就进入了 NULL = NULL 不返回该行。例如,如果我用 id=1 把table弄成这样

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

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

bqjvbblv

bqjvbblv1#

用途:

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

相关问题