2017-05-01 55 views
0

我有一個原本簡單的查詢的WHERE子句,我不理解,並希望與幫助下面的代碼:T-SQL:需要幫助理解「奇怪」在SQL WHERE子句

... AND --Filter on StoreID 
(
('545' IS NOT NULL AND a.StoreID IN (545)) OR 
('545' IS NULL) 
) 
AND ... 

的查詢出現如果我將其更改爲返回同樣的結果:

... AND a.StoreID IN (545) AND ... 

我希望得到任何幫助,理解這一點。

謝謝,提前!

+2

如果''545''值從代碼動態添加那麼這將是有選擇地在該值濾波器,或者忽略的方式如果沒有提供值,則過濾。 – David

+0

'不是空'部分是完全不必要的。 '〜AB + A'相當於'A + B'。 – shawnt00

+0

它可能工作正常,但它真的沒有任何意義的測試一次作爲一個字符串,再次作爲數值。 – shawnt00

回答

2

它看起來彷彿是「545」的值通過參數傳遞,主要是在存儲過程或通過動態SQL生成用於從一個應用程序:

(@value IS NOT NULL AND a.StoreID IN (@value)) OR 
(@value IS NULL) 

這種條款將做一個在搜索,如果@value不爲NULL,或者在@value爲NULL時選擇「all」記錄。

一般而言,這將有條件地篩選的結果,如果一個值供給

+0

謝謝!您的回答提醒我,我最初是從我們的第三方軟件的報告功能中的某個報告中提取了此SQL。請接受我不記得提及的道歉。再次,非常感謝! – Talay

+0

np! 如果答案對您有幫助,請考慮將其標記爲具有類似問題的其他人正確。 –