を含むCASEを使用してWHERE私のような何か書き込もうとしています:短絡CONTAINS
SELECT Id FROM SomeTable
WHERE
CASE WHEN (@param IS NULL) THEN
1
ELSE
CONTAINS([FullText],@param)
END = 1
を、私は、構文文句ないようにSQL Serverのように見えることはできません。 CONTAINS検索を短絡するためにCASEを使用する方法はありますか?
はさえ、短絡していないようです。このような何かをやって:あなたは実行計画を見ればあなたがcase
は、両方の部分が実行されている
if... else
のシリーズに翻訳されていることがわかります
CASE WHEN (@param IS NULL) THEN
1
ELSE
(CASE WHEN CONTAINS([FullText], @param) THEN
1
ELSE
0
END)
END = 1
[SQL WHERE句は短絡していますか?](http://stackoverflow.com/questions/789231/is-the-sql-where-clause-short-circuit-evaluated) – naomik
の '文が左から右に評価されるので、「OR」は十分でなければならない(例えば、 '@param IS NULLまたはCONTAINS([FullText]、@ param)') – Anthony
@Anthony Nope;リンクされた質問を参照してください。 –