我想在where子句中执行类似的操作
WHERE ( i.accountid = @accountid
AND CASE WHEN @IsTest IS NOT NULL THEN b.IsTest = @IsTest ELSE 1 = 1
但是这个解决方案不起作用。对此有什么解决方案吗?基本上我想根据@IsTest
值添加验证。
答案 0 :(得分:5)
您想使用简单的布尔逻辑:
where
i.accountid = @accountid
and
(@IsTest is null or b.IsTest = @Istest)
如果您想让case
解决方案正常工作(仅用于说明目的 - 这不是一个好主意),您需要让case
返回一个值你要比较的东西--T-SQL实际上没有" bool类型" (bit
只是一个非常小的整数,它没有特殊的语法):
... and (case when @IsTest is not null then @IsTest else 1 end) = 1
答案 1 :(得分:0)
试试这个
WHERE ( i.accountid = @accountid
AND b.IsTest = CASE WHEN @IsTest IS NOT NULL THEN @IsTest ELSE 1 END)
或只是
WHERE ( i.accountid = @accountid
AND b.IsTest = COALESCE(@IsTest1,)