今回初めてSQLServerのストアド使ってバッチを作成。
バッチであればいいかとDB側で簡潔するのでいいかとは思うが。
クライアントのプログラム側と連携するとソースが追えなくて処理の内容がわかりにくくなりそうな。
まあでも少しは使い方がわかったのでとりあえず忘れないように。
情報はたくさんありました。
内容はテーブルAの情報をテーブルBに対して一括で登録するという簡単な要件。
SELECT INSERTで書いちゃえば一発で終わるんじゃないかと思ったんですが諸事情によりストアドを利用。
INSERT部分が別のストアドで作られており、関連テーブルの更新等を行っていたので、
SELECTしたレコードからパラメーター渡して処理を実行してあげる必要があったんです。
なのでSELECT情報をループさせてレコードごとにINSERT処理を行うストアドを実行。
下記ストアド記述
--------------------------------------------------
BEGIN
DECLARE csr CURSOR FOR
SELECT
id
,A_col1
,A_col2
,A_col3
FROM
TABLE_A
DECLARE @prm1 NUMERIC
DECLARE @prm2 VARCHAR(50)
DECLARE @prm3 VARCHAR(50)
DECLARE @prm4 VARCHAR(50)
OPEN csr
FETCH NEXT FROM csr
INTO @prm1, @prm2, @prm3, @prm4
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_INSERT_TABLE_B @prm1, @prm2, @prm3, @prm4 ← INSERT処理を行う別ストアドを実行
FETCH NEXT FROM csr
INTO @prm1, @prm2, @prm3, @prm4
END
CLOSE csr
DEALLOCATE csr
--------------------------------------------------
まあでもストアドの書き方がわからずそれなりに四苦八苦しちゃいましたど。
カーソルの使い方もよくわからず。
いつものことですが終わってしまうと、とても簡単なことだったと気づくわけで。
わからないことが多すぎて。
日々精進。
0 件のコメント:
コメントを投稿