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 に答える