• ベストアンサー

バッチファイルからSQLファイルへ引数を渡したい!

こんばんは。 質問があります。 バッチファイル(.bat)を実行させてトランザクトSQL(SQL Server2005)の処理を行いたいのですが、その際に ・引数を渡す ・戻り値を返す 上記の二つのことって出来るんでしょうか? 自分なりに色々調べてはいるのですがどうしてもわかりません。。 もしどなたかご存知の方がいらっしゃったらぜひ教えてください。 分かりやすいサイトとかも助かります。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

osqlの-Qは引数のリテラルに書かれた コマンド実行結果をERRORLEVELに設定するようです osql -E -dxxx -Q "EXIT( DECLARE @ret int; EXEC @ret = CheckRows; SELECT 'ret' = @ret )" などのようにすると ストアドプロシージャ『CheckRows』の結果をERRORLEVELに設定するようです

bell0430
質問者

お礼

教えていただいたとおりやってみると成功しました!! 本当にありがとうございます! 引数の渡し方は勉強不足で結局分からなかったのですが 戻り値は成功しました。 本当ににありがとうございました。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

T-SQLを実行させるのが sqlcmd.exeや osql.exeなら SQLコマンドの EXITの引数に返したいデータを渡してやれば バッチ側では ERRORLEBVELで判定出来ます バッチのERRORLEVELの判定は 大きい物から順に判定するようにしましょう たとえば sqlcmd -Q "EXIT( SELECT COUNT(*) FROM 'myTable' )" IF ERRORLEVEL==2 GOTO L2 If ERRORLEVEL==1 GOTO L1 GOTO ERR :L2 rem 何がしかの処理 goto END :L1 rem 何がしかの処理 goto END :ERR @echo "ERRORです" :END といった具合でしょう sqlcmd -Q "EXIT( SELECT COUNT(*) FROM 'myTable' )" の引数を適宜変更すればご希望の動作になりそうです SQLServerのBooksOnlineで Sqlcmdなどを参照してみましょう

bell0430
質問者

お礼

回答ありがとうございます。 何度も何度も読ませていただきました。 でもイマイチ理解できませんでした。。 >sqlcmd -Q "EXIT( SELECT COUNT(*) FROM 'myTable' )" 上記の記述についてなのですが、これはたとえばバッチファイル(test.bat)から SQLファイル(fnc.sql)に'100'という引数を渡したい場合は↓のように書けばいいということでしょうか? osql -U %ユーザ名% -P %パスワード% -d %DB名% -i %ディレクトリ%\fnc.sql -Q "EXIT('100')" そしてfnc.sql内での処理で設定した値を戻り値としてRETURNさせれば test.batのERRORLEVELに戻り値が代入されるということでしょうか?? どうしてもうまくいきません。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>上記の二つのことって出来るんでしょうか? バッチファイルを起動する際に、 C:\>execute.bat "sample.tbl" のように引き数を渡したいということですか? そして、execute.bat が終了したときの終了コードを OS に返したいということでよいのですかね。

bell0430
質問者

お礼

早速の回答ありがとうございます。 説明が足りなくて申し訳ありません。 > C:\>execute.bat "sample.tbl" >のように引き数を渡したいということですか? ↑これってコマンドプロンプトから引数を渡すってことですよね? ちょっと違います^^; 私がやりたいことなのですが、予めバッチファイルの中に引数を記述しておき バッチ実行時にバッチファイル内からSQLファイルへ引数を渡すイメージです。 戻り値に関しては、SQLファイル内の処理でフラグなどを設定しておいて それをバッチファイルの中に戻したいなと。 (SELECT結果がaが場合はフラグ = 0 , bの場合はフラグ = 1 のように) そのフラグの結果によってその後のバッチファイル内の処理の流れをIF文で変えようと思っています。 何だか無茶なことを言っていたらすみません。 よろしくお願いします。