
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ではない場合の処理ができません。
このような場合、どのように記述すれば目的の処理を達成できるのか
教えていただけないでしょうか?
よろしくお願いします。
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;
回答ありがとうございます。
INSERTを2つ書いておけば良いだけの話だったんですね。
入れる値が違うだけなので、変数のほうが分岐するような
イメージがあったので、思い浮かびませんでした。
大変参考になりました。
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;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
GROUP BYを行った後に結合したい。
Oracle
-
CASE文のエラーについて
Oracle
-
-
4
select insertで複数テーブルから値を取得したい
Oracle
-
5
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
6
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
7
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
8
Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)
UNIX・Linux
-
9
UPDATE文のWHERE条件に他のテーブルのフィールドも入れたい
SQL Server
-
10
visual studio2019でデバッグができません
Visual Basic(VBA)
-
11
SQLのエラー(~付近に不適切な構文があります)
SQL Server
-
12
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
13
Oracle 8i コンマ(,)を含むデータをinsertしたい
その他(データベース)
-
14
PL/SQLカーソルの2重FORループができません
Oracle
-
15
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
16
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
17
テーブルの最後(最新)のレコードを抽出したい
MySQL
-
18
FROM の中で CASE を使えるでしょうか
SQL Server
-
19
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
20
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
ビューで引数を使いたい
-
空のテーブルの判別
-
IFで条件を分岐させてのINSERT...
-
複数のテーブルから同じ条件で...
-
Insert Into Select での重複に...
-
リレーションシップ 全データを...
-
「マスタ」と「テーブル」の違...
-
Accessにインポートしたら並び...
-
SQL Server のデータをCSVファ...
-
3つ以上のテーブルをUNIONする...
-
Access VBA [リモートサーバー...
-
SI Object Browserのテーブルス...
-
SELECT文でのデッドロックに対...
-
Accessでレコードが更新された...
-
Select ~ into ~ で作成した...
-
エクスポート時の改行コードに...
-
実行時エラー3086 削除クエリ...
-
accessのエクスポートエラーに...
-
ACCESS2007 フォーム 「バリア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビューで引数を使いたい
-
ACCESS 一番最新の日付の金額...
-
IFで条件を分岐させてのINSERT...
-
複数のテーブルから同じ条件で...
-
Insert Into Select での重複に...
-
SQL文で
-
MS Accessの抽出の仕方について...
-
データベース設計のこと
-
Accessで在庫管理を
-
大学でSQLの授業があるのですが...
-
Sql文のUpdateと副問い合わせで...
-
select into句のトランザクショ...
-
SQLでの更新クエリに関する質問
-
(初心者です)パフォーマンス...
-
BETWEEN A AND B
-
空のテーブルの判別
-
年齢分布テーブルの再集計SQL
-
SELECT時のパフォーマンス
-
リレーションシップ 全データを...
-
where条件内のin句について
おすすめ情報