あほみたいな箇所で詰まったのでメモ。
ジョブの実行順序の管理で、WaitFor関数つかって前処理の完了待ちをしたかった。
WAITFOR DELAY '00:00:10'
で、10秒待つ。
これの何秒待つかを、別の管理テーブルに格納しておいて
あとあと変更できるようにしておく。
設定値は最大待ち時間と、確認間隔。
それだけなんだけど、この’hh:mi:ss'で悩んだ。
最初は管理テーブルに、このフォーマットの文字列を入れた。
最大待ちが'00:30:00'で、確認間隔が'00:00:20'みたいな。
そうすっとTime型に入れて処理すればいいかな、と思ったんだけど
Time型の加算ってどうすんの、ってことになり、
DateAddじゃね?⇒あれこれ、エレメント指定だけどどうすんの⇒めんどくさ。
じゃあどうせ秒で指定するし、最大待ち1800(s)、確認間隔20(s)っていれとこ。
と思ったらWaitForは’hh:mi:ss'だし・・・。
なんやねんこいつら、仲わりい。
最終的には秒指定でフォーマット変換は以下のSQL。
SELECT CONVERT(char(12), DATEADD(second, 30, CONVERT(datetime, 0)), 108)
なんやねんこれ、めんどくさすぎるやろ・・・。
バッチファイル作ったらとりあえずこれ。居酒屋ビール級。
cd /d %~dp0
cdはカレントの指定です。説明不要。
/dは、ドライブ移動。
で、問題の%~dp0
%0は実行中のバッチのパス。
そのままだと””で囲われている。~を付けるとダブルクォートが外れる。
dはドライブ文字のみ。pはパスのみ。dpでドライブとパス。たぶんそういうこと。
参考
http://pentan.info/server/windows/cmd/dp0.html
バッチ内からSQL発行して結果をどうこうする。
ヘッダとかは要らないのでいろいろパラメータ指定してる。
sqlcmd -S 【接続先インスタンス】 -d 【DB】 -U 【ユーザ】 -P 【パスワード】 -i TEST.sql -v myParam='%%a' -h -1 -b -s "," -W >> 結果.txt
-S, -d, -U, -Pあたりまでは接続情報。
たぶんテキスト化して外部から取り込みとかできるけどしてない。
-iはインプットファイル。
-vはインプットファイルに渡すパラメータを設定できる。
この場合は変数%%aをmyParamって名前で渡す。
SQLファイル側で$(myParam)と書いておくと、そのパラメータが入ってくる。
-hは、ヘッダとの間を何行空けるか。
-1を指定するとヘッダが出なくなる。
-bは、エラー時にERRORLEVELを返すようにする。(たぶん)
別に使わないなら要らない。
-sは、項目間のセパレータを指定。
-Wは、値の後ろの空白を削除する。
この二つはたいてい合わせて指定するものっぽい。
あとは結果を>>で出力。
なおsqlcmdとは関係ないが、>>だと追記。>だと上書き。
-oオプションで出力ファイルを指定することも可能。ただしこの場合は上書きオンリー。