sql-server - 基于传递给存储过程的参数在where子句中进行条件检查
问题描述
我正在处理的存储过程有 2 个参数@IsApproved (BIT)
和CustomId (INT)
.
现在在我的WHERE
条款中,我想检查是否@IsApproved
,如果它被批准然后使用A.[FunctionalId] = @CustomId
else 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
解决方案
表达式返回标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);