2017-01-06 6 views
3

私はSQLのエキスパートではありません。変数に基づいてWHERE句の比較をIS NULLまたはIS NOT NULLに設定する方法はありますか

私は呼び出しているストアドプロシージャを持っています。私はブール値として使用される@Requestedという名前の変数を渡します。

SELECT 
    ID 
FROM 
    SomeTable 
WHERE 
    Requested = CASE @Requested WHEN 0 THEN IS NULL WHEN 1 THEN IS NOT NULL END 
; 

を私はTHEN 'some string'を行う場合は、上記のコードは明らかに、作品Incorrect syntax near 'IS'

を述べSQL Server Management Studioでエラーが発生します:私は何をしようとしている

。私はRequested CASEとしてこれをやった

...とRequested = CASE

は基本的に私が欲しいもの

Requested IS NULL 

OR

ある
Requested IS NOT NULL 

@Requestedとして渡されるどの値に基づいて、 。

アイデア?

おかげ

答えて

5

OR声明を通じてWHERE句の両方の条件を使用してください。これにより、@Requested変数の値に基づいて適切なロジックが使用される条件が作成されます。

Select ID 
From  SomeTable 
Where ((@Requested = 0 And Requested Is Null) 
    Or (@Requested = 1 And Requested Is Not Null)); 
+0

は素晴らしい作品。ニースとシンプル。ご協力ありがとうございました。 – user1289451

0

T-SQLは、あなたがのような不器用なもので立ち往生しているbooleanデータのための限定的なサポートがあるので:

case when @Requested = 0 then 
    (case when Requested is NULL then 1 else 0 end) 
    else 
    (case when Requested is not NULL then 1 else 0 end) 
    end = 1 

CASEの結果は、例えば、使用する必要のある値であることを注意を1と比較して。

また、あなたは前のクエリに意思決定の一部を上に移動できます。

declare @IfNull as Int = case when @Requested = 0 then 1 else 0 end; 
declare @IfNotNull as Int = 1 - @IfNull; 

select ... 
    where case Requested is NULL then @IfNull else @IfNotNull end = 1; 
関連する問題