替代值比null

时间:2011-08-19 16:21:30

标签: tsql null where coalesce isnull

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

让我们假装我们有这样的查询:

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

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

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);

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

但我的问题是:这真的是最好的方法吗?在我看来,这是一个很好的方法,但我已经考虑了很多,而且根本无法想出更好的方法。< / p>

编辑,但这似乎最好:

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

1 个答案:

答案 0 :(得分:2)

这样做会不简单?

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

SELECT * FROM users
  WHERE (@LastName IS NULL) OR (@LastName = LastName);