LoginSignup
50
58

More than 5 years have passed since last update.

【備忘録:SQLServer】バッチからSQLを実行する

Last updated at Posted at 2014-10-17

概要:
  バッチから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
50
58
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
58