2017-09-27 2 views
0

私はNULLの整数に基づいて結果をフィルタリングするはずのストアドプロシージャを持っており、整数に一致するかすべての結果を取得できる結果を選択できる必要があります私は "すべて"の結果の部分の構文を理解することはできません。クエリは、基本的にはこれです:CASE文のELSE句としての値の範囲

Select * from dbo.TABLE 
WHERE [IDField] = 
    CASE 
    WHEN ISNULL(@ID, 0) > 0 THEN @ID 
    ELSE ????? 
    END 

私は0Nullにそれを設定すると結果が返されません。ので、すべての値が含まれるようにIN範囲を使用したいが、これは動作しません:

Select * from dbo.TABLE 
WHERE [IDField] = 
    CASE 
    WHEN ISNULL(@ID, 0) > 0 THEN @ID 
    ELSE 1 OR 2 OR 3 
    END 

あるいは、この:caseなし

Select * from dbo.TABLE 
WHERE [IDField] IN (
    CASE 
    WHEN ISNULL(@mID, 0) > 0 THEN @mID 
    ELSE 1,2,3 
    END 
) 
+0

あなたの問題文は非常に明確ではないが、私はあなたが '... [IDField] = @ID OR 1 =のような何かをしたいと思います1 ' 。 – mustaccio

+1

WHERE(およびON)節でcase _expressions_を使用することは、一般的には悪い考えです。代わりにAND/ORに固執する。 – jarlh

答えて

2

フレーズこれを:

SELECT * 
FROM dbo.TABLE 
WHERE @id is null OR IDField = @id; 

その後、あなたはこれを拡張することができます。

SELECT * 
FROM dbo.TABLE 
WHERE (COALESCE(@ID, 0) > 0 AND IDField = @id) OR 
     IDField IN (1, 2, 3) 
+0

'Coalesce'は動作しませんでしたが、残りの部分にはスポットがありました。プロシージャのどこかでヌル値が0に設定されていたため、この(ID = 0および[IDField] in(1,2,3))または[IDfield] = IDになりました。ありがとう。 – Wompguinea

関連する問題