- ベストアンサー
ストアドプロシジャと変数のセットについて
- SQL SERVER 2005を利用し、ストアドプロシージャを作成しております。あるストアドでwk_hizukeというテーブルから、tokuisakicodeとdenpyouhizukeを変数@tokucdへ送り、別のストアドを呼び出し@hizuke1を戻り値としてメインのストアドへ戻し、@hizuke1を上記テーブルのdenpyouhizukeへ格納したいというのが行ないたいことです。
- wk_hizukeというテーブルには複数のレコードが入っており、そのレコードを一件ずつ読みながら、上記の処理を行ないたいと考えております。
- 構文の記述がエラーとなっており、原因を特定できずに困っています。アドバイスをお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
大体やりたい事のイメージはつかめます。 >wk_hizukeというテーブルには複数のレコードが入っており、そのレコード >を一件ずつ読みながら、上記の処理を行ないたいと考えております。 (略) >が、妥当と思われる構文を見出すことができずにおる次第です。 その場合は、「カーソル(CURSOR)」を使用します。 ・カーソルをオープンし、それを1行ずつ読み込んでループの中で処理する と言う方法です。 カーソルを定義して、オープンした後、そのカーソルを1行づつ処理します。 カーソルLOOPで1行読み込む事を「フェッチ(FETCH)」と言います。 本家MicrosoftのMSDN - FETCH (Transact-SQL) http://msdn.microsoft.com/ja-jp/library/ms180152.aspx @IT:ストアドプロシージャによる繰り返し処理 http://www.atmarkit.co.jp/fnetwork/rensai/sql22/sql1.html ストアドプロシージャの花形“カーソル”を使おう - @IT http://www.atmarkit.co.jp/fdb/rensai/tsql11/tsql11_1.html 肝の部分だけ簡潔に書くとこんな感じです。 (sp_hizukesanshutuに必要な変数定義や構文の確かさ等々は省略しています) -- カーソル定義 DECLARE wk_hizuke_cur CURSOR FOR SELECT tokuisakicode FROM wk_hizuke; -- カーソルオープン OPEN wk_hizuke_cur; -- 1行先読み FETCH NEXT FROM wk_hizuke_cur; --↓ ↓ ↓ ↓ ↓ LOOP処理開始(データが存在する間ループする) WHILE @@FETCH_STATUS = 0 BEGIN -- ↓1行読んだ後の処理をここに記述する -- ストアド呼び出し exec sp_hizukesanshutu @tokucd , @hizuke1 output; -- おそらくこの後、output の hizuke1 を使って何か処理するんでしょうね? -- 更に1行追加で読み込み(データがあれば再度ストアド呼び出しを行なう) FETCH NEXT FROM wk_hizuke_cur; END --↑ ↑ ↑ ↑ ↑ LOOP処理終了 -- カーソルクローズ CLOSE wk_hizuke_cur; --最後のおなじない DEALLOCATE wk_hizuke_cur; この手の処理の王道が、上記のカーソルでLOOPする方法です。 バルク的にガッと一発で処理する方法と言うのも、アレコレいじれば多分可能ですが、output を使って何か処理するのであれば、バルク的な処理はできない、と言う要件ですよね、おそらく。 いずれにせよ、まずは王道を先に身に付けた方がよろしいかと思います。
お礼
ご回答いただき、どうもありがとうございました。 大変わかりやすく、参考になりました。 さっそく試してみたいと思っております。記していただいたURLも参照させていただきます。 ありがとうございました。