如您所知,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);
答案 0 :(得分:2)
这样做会不简单?
declare @LastName varchar(50) = 'Nixon';
SELECT * FROM users
WHERE (@LastName IS NULL) OR (@LastName = LastName);