2011年4月4日月曜日

ストアドプロシージャ ループ処理 SQL Server 2005

今回初めて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 件のコメント:

コメントを投稿