概要:
バッチからSQLServerにSQLを発行する方法。
目的:
定期的にSQLを発行する必要が出てきたので、
バッチで加工してタスクスケジューラを使用して自動処理すること。
土日にパソコン開いてSQLを発行とかエンジニアがする事ではないので、
ちょこちょこと用意しました。
ただ、目的により実行方法が若干変更する必要があったので、
・ストアドを実行する
・SQLを記載したTEXTを読み込んで実行する
・SQLを直書きして実行する
の3パターンで用意しました。
共通バッチを用意して、引数さえ受け取れるようにすれば汎用化も可能です。
ソース:
/*************************************************
* ストアドから実行します。
* server -> インスタンス名
* db -> データベース名
* StoredProcedure -> ストアドプロシージャ名称
* ret -> ストアドからの返却値
* par1 -> 引数1
* par2 -> 引数2
* ストアドをSQLServerに登録してから実行してください。
*************************************************/
sqlcmd -l 240 -E -S %server% -d %db% -Q "EXIT( DECLARE @ret int; EXEC @ret = %StoredProcedure% '%par1%', '%par2%'; SELECT @ret )"
/*************************************************
* SQLをテキストから読み込んで実行します。
* FullPathFileName -> SQLを記述したファイルの絶対パス
*************************************************/
sqlcmd -l 240 -E -S %server% -d %db% -i %FullPathFileName%
/*************************************************
* SQLを直打ちで実行します。
* user -> ログインユーザID
* pass -> ログインパスワード
*************************************************/
sqlcmd -Q "SELECT * FROM SAMPLE_TABLE" -S %server% -d %db% -U %user% -P %pass%
/*
書くまでもないけど、こうするとSELECT句の結果も手に入る.
Select句で引っこ抜いて、データが有った場合に通知する・データを修復する・・・と言った運用出来なくはない。
データのバックアップ目的ならBCPコマンドを活用しても良し.
*/
sqlcmd -Q "SELECT * FROM SAMPLE_TABLE" -S %server% -d %db% -U %user% -P %pass% >> hoge.txt
/*
上のSQLだとヘッダーとか最後の行数が邪魔なので、それを除外したVer.
オプション詳細はそのうち・・・。
*/
sqlcmd -l 240 -E -S %server% -d %db% -i %FullPathFileName% -s, -W -h -1 -o hoge.txt