1

如您所知,在 SQL 中 null 从不等于 null。

假设我们有这样的查询:

declare @LastName varchar(50) = 'Nixon';
select * from Users 
    where LastName = @LastName;

如果我想允许变量为空,我这样做:

declare @LastName varchar(50) = 'Nixon';
select * from Users 
    where LastName = IsNull(@LastName, LastName);

但是如果 LastName 为空怎么办?我必须这样做:

declare @Null varchar(50) = '!{-[~]-}!'; -- any-ole gibberish

declare @LastName varchar(50) = 'Nixon';
select * from Users 
    where IsNull(LastName, @Null) = Coalesce(@LastName, LastName, @Null);

这很好用,我看到很多类似的方法。

但我的问题是:这真的是最好的方法吗?在我看来,这是一个杂牌,但我想了很多,根本想不出更好的办法。

编辑,但这似乎最好:

declare @LastName varchar(50) = 'Nixon';
select * from Users 
    where (@LastName is null) or (@LastName = LastName);
4

1 回答 1

2

这样做不是更简单吗?

declare @LastName varchar(50) = 'Nixon';

SELECT * FROM users
  WHERE (@LastName IS NULL) OR (@LastName = LastName);
于 2011-08-19T16:24:50.203 回答