2016-10-02 4 views
-1

条件付きでストアドプロシージャのWHERE部分に句を追加したいが、CASEを使用することが本当に悪いことを理解している。基本的に私がやろうとしていることは次のとおりです。CASEを使用せずに条件付きでWHERE句を追加する方法

@StartDate 
@EndDate 
@ClientID 
SELECT field_1, field_2, datefield_3 
from tblTable 
Where datefield_3 Between @StartDate AND @EndDate 
--If @ClientID > 0 then add 
AND field_1 = @ClientID 

お勧めはありますか?

+0

'case'が最も使いやすい(そして最も速い)ツールであるケースは非常に多くあります。このケースはその1つではないかもしれませんが、テストしないで 'case'を除外して、どのように動作しているのかを確認しないでください。 – cco

答えて

0

のと同じくらい簡単:

@StartDate 
@EndDate 
@ClientID 
SELECT field_1, field_2, datefield_3 
from tblTable 
Where datefield_3 Between @StartDate AND @EndDate 
    AND (@ClientID <= 0 OR field_1 = @ClientID) 

= 0 <を@ClientID場合は、追加の条件が評価されません。私。 @ClientID> 0の場合、field_1 = @ClientIDが評価されます。

0

ここでは、次のとおりです。

... 
Where datefield_3 Between @StartDate AND @EndDate 
AND (field_1 > 0 OR field_1 = @ClientID) 
0
@StartDate 
@EndDate 
@ClientID 


IF ClientID>0 
BEGIN 
SELECT field_1, field_2, datefield_3 
from tblTable 
Where datefield_3 Between @StartDate AND @EndDate 
AND field_1 = @ClientID 
END 
ELSE 
BEGIN 
    SELECT field_1, field_2, datefield_3 
from tblTable 
Where datefield_3 Between @StartDate AND @EndDate 
END 
関連する問題