2017-04-18 32 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 
相关问题