2016-10-28 13 views
2

私は、もう少し複雑なSQL-ServerのCASE文の記述しようとしています:SQL-Serverのdouble equalsに相当しますか?

... 
and (@StatusID is null or 
     (case 
      when @StatusID = 0 and sr.Comment is not null 
      else @StatusID == sr.StatusID 
     end) 
    = 1) 
and ... 

を私は二重の等号でエラーが発生します。また、私は私がやろうとしていますが、SQL-Server上で何ができるか上の任意の情報を見つけることができませんでした。この

else @StatusID = sr.StatusID then 1 

else @StatusID is sr.StatusID 

を試してみました。

+0

あなたは出力エラーメッセージをコピーしてくださいことはできますか?また、sr.StatusIDの列の種類は何ですか? –

+0

'@ StatusID'に代入するのか、それとも他の値と比較しますか? –

+2

すべては用途によって異なります。同じ '= '記号は、代​​入と等価比較の両方に使用されます。 – jarlh

答えて

4

あなたはあなたを助けるかもしれない。この

and (@StatusID is null or 1 = 
    (CASE 
     WHEN @StatusID = 0 AND sr.Comment IS NOT NULL THEN 1 
     WHEN @StatusID = sr.StatusID THEN 1 
    end) 
) 
+0

'=' '1'と' case'の間に欠けています –

0

CASE WHEN <EXPRESSION> THEN ... ELSE ... END 必要な構文です。あなたはちょうどTHENを忘れてしまった。また、単一の等号が正しいSQL構文です。

-1

This question and answerを探していることがあります。このような比較を達成するための

一つの方法は、例えば、文字列にダブル、それらを比較することをキャストすることによってである:

-- select ids (double) that start with '1' by casting them to varchar and using LIKE 

SELECT * FROM MyTable WHERE CAST(Id AS VARCHAR) LIKE '1%'; 
関連する問題