2010-09-07

SQL Serverでのファイル出力込みのバッチ処理

SQL Serverで考える機会があったため、エントリー。

SQL Serverではストアドプロシージャを使用した複数レコードのファイル出力はコマンドレベルでサポートされていない。
sqlcmdを使用して出力できるのはPRINT文やメッセージ、あるいはSELECT文での結果の出力に限定される。

だがこれだと1レコード毎に処理しつつファイル出力できない。
カーソルを使用して処理を行い、正常処理されたレコードのみ出力するにはどうするか?

そんな時はファイル出力用のテーブルを用意しよう。
ストアドプロシージャで正常処理された結果のみそのテーブルに追加し、その後sqlcmdでselect文でファイル出力すれば良い。
処理中エラーが発生した時はエラーコードをかえしたり、エラーメッセージを返すストアドプロシージャを作成すればなお良い。