如何为int类型变量

时间:2017-04-18 09:42:47

标签: sql sql-server

有两个变量StatusTypeTestID和StatusTestID想要在where子句中将它们设置为可选,如下所示,但是可选选项不适用于int变量。

注意: int变量的默认值为0

DECLARE @StatusTypeTestID as int
SET @StatusTypeTestID = 1

DECLARE @StatusTestID as int
SET @StatusTestID = 0

select *
from LiveCustomerStatus
where (StatusType=@StatusTypeTestID
  and (Status = @StatusTestID or @StatusTestID is null))

3 个答案:

答案 0 :(得分:0)

正如您已经尝试的那样,您可以检查您的参数是否已设置为null或是否与对应字段匹配。

这样,如果您希望它是可选的,则可以将参数保留为null,而不会影响结果。

select *
from LiveCustomerStatus
where     (@StatusTypeTestID is null or StatusType=@StatusTypeTestID)    
      and (@StatusTestID is null     or Status = @StatusTestID)  
option(recompile)

我添加了一个选项(重新编译)子句,它将强制SQL Server在每次执行时重新编译查询。这样它将使用适当的索引来根据参数的值来优化它(它们是否为null)。

答案 1 :(得分:0)

您可以对两个set语句进行注释,以下查询将起作用:

DateTime

答案 2 :(得分:0)

在WHERE子句中使用CASE语句:

   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