プロが教えるわが家の防犯対策術!

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

A 回答 (3件)

osqlの-Qは引数のリテラルに書かれた コマンド実行結果をERRORLEVELに設定するようです



osql -E -dxxx -Q "EXIT( DECLARE @ret int; EXEC @ret = CheckRows; SELECT 'ret' = @ret )"
などのようにすると ストアドプロシージャ『CheckRows』の結果をERRORLEVELに設定するようです
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/28 23:56

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などを参照してみましょう
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
何度も何度も読ませていただきました。
でもイマイチ理解できませんでした。。

>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に戻り値が代入されるということでしょうか??

どうしてもうまくいきません。

お礼日時:2008/05/27 11:40

>上記の二つのことって出来るんでしょうか?


バッチファイルを起動する際に、

C:\>execute.bat "sample.tbl"

のように引き数を渡したいということですか?

そして、execute.bat が終了したときの終了コードを OS に返したいということでよいのですかね。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
説明が足りなくて申し訳ありません。

> C:\>execute.bat "sample.tbl"
>のように引き数を渡したいということですか?

↑これってコマンドプロンプトから引数を渡すってことですよね?
ちょっと違います^^;
私がやりたいことなのですが、予めバッチファイルの中に引数を記述しておき
バッチ実行時にバッチファイル内からSQLファイルへ引数を渡すイメージです。
戻り値に関しては、SQLファイル内の処理でフラグなどを設定しておいて
それをバッチファイルの中に戻したいなと。
(SELECT結果がaが場合はフラグ = 0 , bの場合はフラグ = 1 のように)

そのフラグの結果によってその後のバッチファイル内の処理の流れをIF文で変えようと思っています。

何だか無茶なことを言っていたらすみません。
よろしくお願いします。

お礼日時:2008/05/26 00:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています