2017-05-01 9 views
0

は私が理解していないとして助けをいただければ幸いそう簡単なクエリのWHERE句で次のコードを持ってどこに「奇妙な」SQL:T-SQL:ニードヘルプ理解句

... 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

を供給した場合、これは条件付きで結果をフィルタリングなります値が指定されていない場合はフィルタリングします。 – David

+0

'is not null'部分は完全に不要です。 '〜AB + A'は' A + B'に相当します。 – shawnt00

+0

実際には、実際には一度文字列としてテストし、再び数値としてテストするのは実際には意味がありませんが、うまく動作します。 – shawnt00

答えて

2

それは545 'の値は、パラメータを経由して渡された場合、ほとんどのアプリケーションからストアドプロシージャにまたは動的SQLの生成を経由して使用されるようになります。

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

のIN検索をするでしょう句のこの種@valueがNULLでない場合、または@valueがNULLの場合は、 "all"レコードを選択します。一般に

` '545'`値がコードから動的に追加された場合、これはその値にフィルタを任意に方法、または無視する値が

+0

ありがとう!あなたの答えは、当初、サードパーティ製ソフトウェアのレポート機能のレポートの1つからこのSQLを取り除いたことを思い出しました。そのことを覚えていないと私の謝罪を受け入れてください。もう一度、ありがとう! – Talay

+0

np!回答がお手伝いした場合は 、それと同様の質問をした他の人には正しいとマークすることを検討してください。 –