0

我在 Where Clause.Query 下的 SP 中使用 SWITCH 语句似乎很好,但我无法理解为什么它给了我错误。查询是:

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

请高手帮帮我。

提前致谢。

4

1 回答 1

2

请参阅CASE 声明的文档

相反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情况。

于 2012-11-01T07:52:36.747 回答