1
WHERE CONDITION1='ABC'
AND Status =
    CASE  @Option 
            WHEN 1 THEN 'True'
            WHEN 2 THEN 'False'
            WHEN 3 THEN  NULL
            WHEn 4 THEN **IN ('True', 'False', NULL)**
    END

最初のオプションは直接一致する= が、最後のオプションはIN

上記のクエリではエラーが発生しますが、それに似たものが必要ですが、見つけることができません。

4

2 に答える 2

5

CASEステートメントをスキップし、ORを使用します。また、ANSI規格に従って、NULLと比較しないでください

WHERE CONDITION1='ABC'
AND ((@Option = 1 AND Status = 'True') OR
     (@Option = 2 AND Status = 'False') OR
     (@Option = 3 AND Status IS NULL) OR
     (@Option = 4 AND (Status IS NULL OR Status IN ('True', 'False'))))
于 2012-11-19T17:32:16.660 に答える
5

ステートメントは一連CASEの値を返すことはできません...しかし、このクエリは同じ結果を返すはずです:

WHERE CONDITION1='ABC'
AND Status =
    CASE  
        WHEN 1 THEN 'True'
        WHEN 2 THEN 'False'
        WHEN 3 THEN NULL
        WHEN 4 THEN Status
    END

また、あなたが持っていない限りANSI_NULLS OFFStatus決して= NULL...IS NULLこの比較のために使用する必要があり、CASEステートメントを完全に放棄する必要があることに注意してください.

于 2012-11-19T17:25:19.940 に答える