2013-10-10 15 views
6

以下のように複数のif文(約100)を使用してT-SQLコードを作成しました。最初のIF文の条件がTRUEと評価された場合でも、残りの99個の文が評価されます。SQL CASE式 - ローカル変数の値を設定する

IF(@check = 'abc') SET @var1 = @value 
IF(@check = 'def') SET @var2 = @value 
IF(@check = 'ghi') SET @var3 = @value 
IF(@check = 'jkl') SET @var4 = @value 
IF(@check = 'mno') SET @var5 = @value 
… 
… 

これらを変換してCASE式を使用したいと考えています。例えば

CASE @check 
    WHEN 'abc' THEN SET @var1 = @value 
    WHEN 'def' THEN SET @var2 = @value 
    WHEN 'ghi' THEN SET @var3 = @value 
    WHEN 'jkl' THEN SET @var4 = @value 
    WHEN 'mno' THEN SET @var5 = @value 
    … 
    … 
END 

のためにしかし、私はそうすることはできませんよ、と私はCASE式の中にSETを使用することはできませんと言うSQLエラーが発生します。

私はこれをどのように実現することができますか?ありがとう!

+2

これらの条件のそれぞれが異なる変数を設定している場合はelseを使用できますが、質問を正しく入力してもよろしいですか? –

+0

'SET @ var1 = CASE WHEN ... THEN ... END'で動作しますか? – a1ex07

+3

なぜ100種類の変数が必要ですか? '@ check'の値に基づいて* one *変数に代入するだけではどうですか? –

答えて

19

case文は、それをカットされません:あなたはCASEとセット使用することができる唯一の方法は、実行することです:

これが唯一のシングルを設定できるよう、あなたのために動作しません
SET @var = CASE @check 
     WHEN 'abc' THEN @value 
     [etc] 
    END 

...変数。だから、すなわち、ELSEを使用する必要があります:あなたは100の異なる変数を設定し、このような100件の句を持っている場合

IF (@check = 'abc') SET @var1 = @value 
ELSE IF (@check = 'def') SET @var2 = @value 
ELSE IF (@check = 'ghi') SET @var3 = @value 
ELSE IF (@check = 'jkl') SET @var4 = @value 
ELSE IF (@check = 'mno') SET @var5 = @value 
    [...] 

は、しかし、それはあなたのアプローチのように聞こえる間違っている可能性があり:私は戻って一歩を踏み出すと自問してみてくださいと思いますなぜあなたは100の別々の変数が必要です。セットベースの解決策として、コアテーブルまたは一時テーブルから読み込む方がよい場合があります。しかし、私たちはあなたがしようとしていることの詳細をもっと必要としています。

+1

+1、特にステップを取り戻すため。 SQLでこのようなことをしようとしている場合は、おそらく5ステップ前に間違った順番を取っていたでしょう... –

+0

私は、100個のネストされたELSE IFステートメントを書いていません。このSQLコードは、私によって書かれていない古いストアドプロシージャの一部です。パフォーマンスのために最適化しようとしています。 – user2867911

+0

とそれはSQL Server 2000のストアドプロシージャです – user2867911

3

Chris Jさんの答えに対する褒美として。

IF (@check = 'abc') 
    begin 
     SET @var1 = @value 
     SET @var2 = @value 
    end 
ELSE IF (@check = 'def') 
    begin 
     SET @var1 = @value 
     SET @var2 = @value 
    end 
ELSE IF (@check = 'ghi') 
    begin 
     SET @var1 = @value 
     SET @var2 = @value 
    end 
ELSE IF (@check = 'jkl') 
    begin 
     SET @var1 = @value 
     SET @var2 = @value 
    end 
ELSE IF (@check = 'mno') 
    begin 
     SET @var1 = @value 
     SET @var2 = @value 
    end 

お知らせ「を開始」と「終了」ステートメントの使用:次の構文を使用します - 誰もがここでは他に、他の場合は、場合は、単一内MULTIPLEにパラメータを設定するために探して。これらのキーワードは、ほとんどのプログラミング言語で使用されている中括弧に似ており、指定された文で複数の行を指定することができます。

関連する問題