正在使用以下SQL,但where子句内的case语句出错。
create procedure MyProcedure
@ApprovalFilter as nvarchar(50),
@BothPendingAndApproved as nvarchar(50)
Select
*
from
myTable
Where
data = "A"
and
case @BothPendingAndApproved
when 'Both' then ApprovalStatus <> 'Rejected'
when 'Specific' then ApprovalStatus like @ApprovalFilter
end
and
Data2="B"
End
为什么这部分会失败?
case @BothPendingAndApproved
when 'Both' then ApprovalStatus <> 'Rejected'
when 'Specific' then ApprovalStatus like @ApprovalFilter
end
2条答案
按热度按时间z3yyvxxp1#
CASE
不是语句而是表达式,它返回标量值。可以重构CASE
表达式以用作 predicate :恕我直言,使用
OR
条件会更清楚一些:请注意,为实现ANSI兼容性而对字符文字使用单引号,并使用SQL Server功能(如筛选索引、索引视图等)。
ee7vknir2#
正如注解中所解释的,CASE并不是这样工作的,你可以使用“简单的”AND/OR条件: