2016-10-02 43 views
-1

我想在存儲過程的WHERE部分中有條件地添加子句,但我明白使用CASE非常糟糕。這基本上是我想要做的:如何有條件地添加WHERE子句而不使用CASE

@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'是最好(最快)的工具使用。這種情況可能不是其中之一,但不排除'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) 

如果@ClientID < = 0時,附加條件沒有進行評價。即如果@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