1
如您所知null在SQL中不會等於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);
但是如果名字爲空?我必須這樣做:
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);
這是不一樣的邏輯。例如,如果@LastName不爲null,並且LastName爲null,那麼你的邏輯會產生意想不到的結果。這是因爲如果姓氏爲空,我上面的邏輯不會返回所有結果。一點也不。 –
你的意思可能是我剛剛添加的第二個查詢? –
是的,這是正確的邏輯,但比我的示例複雜得多。我明白你的信譽是如何不那麼糟糕。 –