web-dev-qa-db-ja.com

SQL Serverでスイッチを使用する方法

ストアドプロシージャで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ずつ増やしたい、などです。正しい構文を教えてください。

18
Ram Singh

CASEは、値を返す-コードブロック全体を実行しないための単なる「スイッチ」です。

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

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

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

41
marc_s

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

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

   select  @selectoneCount 
2
Raab

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

どうしたの:

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

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