こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2008-04-16 22:43:40

QNo.3953385

困ってます

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

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

INSERT INTO テーブルB(区分)
SELECT 1 FROM テーブルA WHERE 区分1 <> 0;
INSERT INTO テーブルB(区分)
SELECT 2 FROM テーブルA WHERE 区分2 <> 0;

投稿日時 - 2008-04-17 06:54:17

お礼

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

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

大変参考になりました。

投稿日時 - 2008-04-18 11:31:10

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

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;

投稿日時 - 2008-04-17 00:26:11

お礼

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

投稿日時 - 2008-04-18 10:50:18

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-