25

CASEストアド プロシージャで使用したい。コードで構文エラーが発生しています。

select 
   case @Temp
   when 1 then (@selectoneCount=@selectoneCount+1)
   when 2 then (@selectoneCount=@selectoneCount+1)
   end

実行すると、次のようになります。

「=」付近の構文が正しくありません。

ここのこの行で:

@selectoneCount = @selectoneCount + 1

同等に近い。

実際には、別の sp から @temp への戻り値を取得しており、@temp =1 の場合、@SelectoneCount のカウントを 1 ずつ増やしたいと考えています。正しい構文を教えてください。

4

4 に答える 4

56

これは、値を返すためのCASE単なる「スイッチ」であり、コードブロック全体を実行するためのものではありません。

コードを次のように変更する必要があります。

SELECT 
   @selectoneCount = CASE @Temp
                         WHEN 1 THEN @selectoneCount + 1
                         WHEN 2 THEN @selectoneCount + 1
                     END

@tempがこれらの値(1または2)のいずれにも設定されていない場合は、NULL

于 2012-06-27T06:04:53.467 に答える
3
    select 
       @selectoneCount = case @Temp
       when 1 then (@selectoneCount+1)
       when 2 then (@selectoneCount+1)
       end

   select  @selectoneCount 
于 2012-06-27T06:08:28.173 に答える
3

これは select ステートメントであるため、ケースの各ブランチは何かを返す必要があります。アクションを実行したい場合は、if を使用してください。

于 2012-06-27T06:01:13.337 に答える
2

実際には、別の sp から @temp への戻り値を取得してから、@temp =1 にしてから、@SelectoneCount のカウントを 1 ずつ増やしたいと考えています。正しい構文を教えてください。

どうしたの:

IF @Temp = 1 --Or @Temp = 2 also?
BEGIN
    SET @SelectoneCount = @SelectoneCount + 1
END

(これは手続き型コードの悪臭を放ちますが、通常は SQL を使用する最良の方法ではありません)

于 2012-06-27T06:25:09.577 に答える