SQL Serverにおいて、大量のSQLをバッチ処理でまとめて実行する方法について説明しています。
大量のINSERTやUPDATEをManagement Studioで実行すると、メモリ不足となり実行できない場合があります。何回かに分ければ問題なく実行できますが、バッチファイルを利用するとまとめて実行することが出来ます。
どちらにしてもSQLを分割する手間はありますが、実行忘れや分割しながら実行する手間を考えるとバッチファイルを利用した方が簡単に実行できます。
バッチファイルの作成
ソース
for文で指定ディレクトリ内のファイル(.sql)数だけ繰り返し、ファイルは変数「%%f」に格納されます。
コマンド「sqlcmd」はSQLを実行するコマンドです。これに変数「%%f」に格納されているファイルを指定すると実行できます。
「-o %%f.log」でコンソール出力をファイルに出力しています。sqlファイルごとに出力ファイルが作成されます。
for %%f in (SQLディレクトリ\*.sql) do ( sqlcmd -S サーバー名 -U ユーザー名 -P パスワード -d データベース名 -i %%f -o %%f.log )
オプション
使用しているオプションの内容についてまとめます。
大文字/小文字で意味の違う設定になるものもありますので、しっかり区別しましょう。
オプション | 設定名称 | 設定内容 |
---|---|---|
-S | サーバーの名称 | ローカルDBなら「localhost」 |
-U | ユーザ名 | DB接続に使用するユーザ名 |
-P | パスワード | DB接続に使用するパスワード |
-d | データベース名 | 接続するデータベース名 |
-i | 入力ファイル | .sqlファイル |
-o | 出力ファイル | .logファイル |
まとめ
SQL Serverにおいて、大量のSQLをバッチ処理でまとめて実行する方法について説明しました。
大量のSQLを実行しようとすると、人的ミスを起こすこともありますので、可能な限り自動化して実行した方が良いでしょう。
- .sqlファイルを作成する
- ディレクトリにまとめて配置する
- for文を利用して、ファイル数分の「sqlcmd」を実行する