有两个变量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))
答案 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