• ベストアンサー

IFで条件を分岐させてのINSERT(ストアド)。

SQL Server2005環境です。 ストアドプロシージャを作成しています。 テーブルAを読み込んで、その値を元に、テーブルBに値を INSERTしていくという処理をしたいと考えています。 1.テーブルA.区分1<>0の時、テーブルB.区分は1 2.テーブルA.区分2<>0の時、テーブルB.区分は2 3.テーブルA.区分1<>0 かつ テーブルA.区分2<>0であれば、  テーブルB.区分が1のレコードと、2のレコード、2つ作る 以上のような処理をしたいと考えています。 ストアドはまったく初心者なのですが、分岐については、 DECLARE TEST CURSOR FOR SELECT 区分1, 区分2 FROM テーブルA OPEN TEST FETCH NEXT FROM TEST INTO @KBN1, @KBN2 --条件分岐 IF KBN1<>0 BEGIN @INKBN=1 END IF KBN2<>0 @INKBN=2 END WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO テーブルB(区分) VALUES(@INKBN) こんな感じになるのか?と思っているのですが、これではケース3の、 区分1、2ともに0ではない場合の処理ができません。 このような場合、どのように記述すれば目的の処理を達成できるのか 教えていただけないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

次の2つのSQL文を書けばいいのでは? ストアドプロシージャで、ループを書くより効率もいいと思います。 ところでこの例では、テーブルBは区分しか持ってませんが、もちろん他のカラムもあるんですよね。 そのときは。SELECT文で必要な値を取得してくださいね。 INSERT INTO テーブルB(区分) SELECT 1 FROM テーブルA WHERE 区分1 <> 0; INSERT INTO テーブルB(区分) SELECT 2 FROM テーブルA WHERE 区分2 <> 0;

ginfix
質問者

お礼

回答ありがとうございます。 INSERTを2つ書いておけば良いだけの話だったんですね。 入れる値が違うだけなので、変数のほうが分岐するような イメージがあったので、思い浮かびませんでした。 大変参考になりました。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

DECLARE @KBN1 INT; DECLARE @KBN2 INT; DECLARE TEST CURSOR FOR SELECT 区分1, 区分2 FROM テーブルA; OPEN TEST; FETCH NEXT FROM TEST INTO @KBN1,@KBN2; WHILE @@FETCH_STATUS = 0 BEGIN --条件分岐 IF @KBN1<>0 INSERT INTO テーブルB(区分) VALUES(1); IF @KBN2<>0 INSERT INTO テーブルB(区分) VALUES(2); FETCH NEXT FROM TEST INTO @KBN1,@KBN2; END;

ginfix
質問者

お礼

大変参考になりました。 ありがとうございました。

関連するQ&A