在SQL中的Switch语句中获取错误

时间:2012-11-01 07:41:28

标签: sql-server switch-statement

我在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

请帮助我专家。

提前致谢。

1 个答案:

答案 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条件。