2016-06-14 22 views
3

でCASEを使用した場合にも同様の質問は、私が理解することはできません構文エラーを取得とにかくhere構文エラーwhere句

を頼まれました。

これは私のコードです:

declare @MyParameter integer 
se @MyParameter = Set At Runtime (could be -1 or any value >=1) 

SELECT manyfields FROM manyjoinedtables 
where 
case when @MyParameter> -1 then 
(FIELD1 **=** @MyParameter AND ANOTHERFIELD = Value**)** 
end -- note: in case @MyParameter = -1 i do not want to add where condition 

とにかく管理スタジオが赤く**上記に囲まれた2つの文字を強調しています。

なぜですか?構文エラーはどこですか?

答えて

2

これを実行します。

DECLARE @MyParameter INT 
SET @MyParameter = Set At Runtime (could be -1 or any value >=1) 

SELECT manyfields 
FROM manyjoinedtables 
WHERE 
    @MyParameter <= -1 
OR 
(
    @MyParameter > -1 
    AND FIELD1 = MyParameter 
    AND AnotherField = Value 
) 
+0

ありがとうございます。リンクされた投稿の受け入れられた回答の構文が間違っています。 – LaBracca

+0

わかりません。動作する可能性があります。しかし、where節で計算を実行していないとパフォーマンスが向上しますので、私はこのロジックに間違いなく挑戦します。これがあなたの質問に答えるならば、答えを受け入れたものとして自由に記入してください。 –

+3

@ user193655この構文は、ケースの各ブランチがブール型であり、ケース式のデータ型全体がブール型であるため、ブール型のデータ型を持つRDBMSで動作します。しかし、SQL Serverはそうではありません。 –