dポイントプレゼントキャンペーン実施中!

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ではない場合の処理ができません。
このような場合、どのように記述すれば目的の処理を達成できるのか
教えていただけないでしょうか?
よろしくお願いします。

A 回答 (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;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

大変参考になりました。

お礼日時:2008/04/18 11:31

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;
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/04/18 10:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A