如您所知,在 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);