首页 > 解决方案 > 基于传递给存储过程的参数在where子句中进行条件检查

问题描述

我正在处理的存储过程有 2 个参数@IsApproved (BIT)CustomId (INT).

现在在我的WHERE条款中,我想检查是否@IsApproved,如果它被批准然后使用A.[FunctionalId] = @CustomIdelse A.[InstallId] = @CustomId

我试过这样,但它会引发错误。

SELECT 
    AppKeyId, AppName, AppVersion 
FROM 
    dbo.[Application] A
WHERE
    CASE 
       WHEN @IsApproved = 1 THEN A.[FunctionalId] = @CustomId
       ELSE A.[InstallId] = @CustomId
    END

标签: sql-serverdatabaseconditional-statements

解决方案


表达式返回标CASE量值,而不是布尔结果;THEN A.[FunctionalId] = @CustomId无效,因为它不是标量值。

使用OR

SELECT AppKeyId,
       AppName,
       AppVersion
FROM dbo.Application A
WHERE (@IsApproved = 1 AND A.[FunctionalId] = @CustomId)
   OR (@IsApproved = 0 AND A.[InstallId] = @CustomId);

推荐阅读