ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3953385 IFで条件を分岐させてのINSERT(ストアド)。
質問者:ginfix 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ではない場合の処理ができません。
このような場合、どのように記述すれば目的の処理を達成できるのか
教えていただけないでしょうか?
よろしくお願いします。
困り度:
  • 困っています
質問投稿日時:
08/04/16 22:43
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.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;
回答者:masa6272
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
08/04/17 06:54
この回答へのお礼回答ありがとうございます。

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

大変参考になりました。

回答良回答10pt

ANo.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;
回答者:nora1962
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
08/04/17 00:26
この回答へのお礼大変参考になりました。
ありがとうございました。