我在SP中使用SWITCH语句Where Where Clause.Query似乎没问题,但我无法理解为什么它会给我错误。 查询是:
Select * from Customer
WHERE (I.IsClose=@ISClose OR @ISClose is NULL)
AND
(C.FirstName like '%'+@ClientName+'%' or @ClientName is NULL )
AND
CASE @abc
WHEN 2 THEN I.RecurringCharge=@Total or @Total is NULL
WHEN 3 THEN I.RecurringCharge like
'%'+cast(@Total as varchar(50))+'%'
or @Total is NULL
END
代码不完整但足以理解问题。我在尝试编译时遇到了错误消息。
Incorrect syntax near '='.
错误位于以下行。
WHEN 2 THEN I.RecurringCharge=@Total or @Total is NULL
请帮助我专家。
提前致谢。
答案 0 :(得分:2)
请参阅the documentation of the CASE sattement。
而是CASE <variable> WHEN <value> ...
您应该使用CASE WHEN <variable>=<value> ...
。
在你的情况下,你最好不要使用CASE
。尝试重写这样的条件
Select * from Customer
WHERE (I.IsClose=@ISClose OR @ISClose is NULL)
AND (C.FirstName like '%'+@ClientName+'%' or @ClientName is NULL )
AND (@Total is NULL OR
(
(@abc = 2 and I.RecurringCharge=@Total)
OR
(@abc = 3 and I.RecurringCharge like '%'+cast(@Total as varchar(50))+'%')
)
)
我缩小了条件,只是为了弄清楚它们是如何应用的。我还考虑了常见的OR @Total is NULL
条件。