2017-04-18 106 views
2

有兩個變量StatusTypeTestID和StatusTestID希望將它們設置爲可選的where子句,如下圖所示,但可選選項不適用於int變量。如何設置int類型變量的可選參數

注:int變量默認值爲0

DECLARE @StatusTypeTestID as int 
SET @StatusTypeTestID = 1 

DECLARE @StatusTestID as int 
SET @StatusTestID = 0 

select * 
from LiveCustomerStatus 
where ([email protected] 
    and (Status = @StatusTestID or @StatusTestID is null)) 

回答

0

正如你已經盡力,你可以,如果你的參數已經被設置爲空或檢查它們是否匹配對應的字段。

通過這種方式,您可以將參數保留爲空,如果您希望它是可選的,不會影響結果。

select * 
from LiveCustomerStatus 
where  (@StatusTypeTestID is null or [email protected])  
     and (@StatusTestID is null  or Status = @StatusTestID) 
option(recompile) 

我添加了一個選項(重新編譯)條款,這將迫使的SQL Server在每次執行重新編譯查詢。這樣,它將使用適當的索引來優化它,具體取決於參數的值(它們是否爲空)。

0

您可以發表評論,同時設置報表和查詢下面將工作:在

select * from LiveCustomerStatus 
    where (@StatusTypeTestID is null or [email protected]) 
    and (@StatusTestID is null or Status = @StatusTestID) 
0

使用CASE語句的WHERE子句:

SELECT * 
    FROM LiveCustomerStatus 
    WHERE StatusType = CASE WHEN ISNULL(@StatusTypeTestID,'') = '' THEN 
           StatusType ELSE @StatusTypeTestID END 
     AND Status = CASE WHEN ISNULL(@StatusTestID,'')= '' THEN Status ELSE 
     @StatusTestID END 
相關問題