• ベストアンサー

バッチファイルから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文で変えようと思っています。 何だか無茶なことを言っていたらすみません。 よろしくお願いします。

関連するQ&A

  • バッチファイルを起動したけど、win98では引数が長すぎて。。。

    VBからバッチファイルを起動する処理を作成中です。 SHELL コマンドで実行しているのですが、 そのバッチファイルの引数がすごく長いのです。 >batch.bat "引数1" "引数2" "引数3" とする際、引数1 ~ 引数3までの合計文字列が 128?byte を超えてしまい、 win98では、使えないプログラムがあります。 複数の引数をまとめたファイルを、バッチファイルの 引数として起動させる等、 回避作はあるのでしょうか? 教えてください。

  • バッチファイルFTP -sで引数を渡せますか?

    どなたか教えて下さい。 TEST.batというバッチファイルの処理の中で、 FTP -s:D:\ABC.bat でファイルを指定して、FTPのputを実行させたいです。 putしたいファイルはTEST.bat内でsetで指定しています。そのsetで指定したファイルを引数などで、\D\ABC.batへ送る方法はないでしょうか?

  • SQLサーバーのジョブでのexeファイル実行について教えてください。

    SQLサーバーのジョブでのexeファイル実行について教えてください。 FTP転送を行うバッチ(拡張子bat)を作成しexeファイルに変換してから SQLサーバーのジョブから実行しようと思っています。 batファイルからexeファイルへの変換は WindowsのIExpressとBat_To_Exe_Converterというツールを使用しました。 SQLサーバーにジョブを作成してバッチを実行させようとしたんですが batファイルのままであれば実行できるのに、exeファイルで実行させようとすると ジョブが実行中のままになり止まってしまします。 exeファイルは直接実行させると想定の処理が実行させるので 壊れていることは無いと思います。 原因の検討がつかず困っています。 些細なことでもいいので何か教えて頂ければと思います。 宜しくお願いします。 尚、exeに変換するのはバッチファイルの中身を見せないようにする為です。

  • mysqlのloadコマンドに引数をセットするバッチの作成

    mysqlのloadコマンドに引数をセットするバッチの作成 データ移行でロードするファイルが数多くあり バッチ処理(param.bat)で実行できるようにしたいのですが、 SQLスクリプト(param.sql)にうまく引数を渡すことができません。 引数1にデータ:aaa.txt 引数2にテーブル:test_tbl どうかアドバイスいただけないでしょうか。 宜しくお願いいたします。 OS:Windows XP 【実行時】 c:temp>param.bat aaa.txt test_tbl 【作成したファイルの記述】 param.bat ------- mysql test1 -u user1 -puser1 < param.sql %1 %2 param.sql ------- LOAD DATA INFILE '&1' INTO TABLE &2 FIELDS TERMINATED BY ',' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'; exit;

  • バッチファイルで他のバッチファイルを呼び出した後、元に戻ってこれない。

    バッチファイルで他のバッチファイルを呼び出した後、元に戻ってこれない。 バッチファイルでほかのバッチファイルを呼び出した後の処理で困っています。 どうぞ教えてください。 「A.bat」というバッチファイルを実行すると、「1.bat」というバッチファイルを 実行させ、「1.bat」の実行結果によって、処理を分岐させたいと考えています。 「1.bat」をcallで呼び出し、実行はできたのですが、「1.bat」は最後にエンタキーを 押さないと終了しないようになっています。そのため、「エンターキーを押して終了させて ください」というメッセージが出たままの画面で終わってしまい、「A.bat」に帰ってくることが できません。 「1.bat」は中身を扱えないようにしてあるバッチファイルなので、こちらでエンターキーを 押さずに終了させるようにはできません。何かいい方法はないでしょうか?

  • vbsからバッチファイル実行時の引数渡しについて

    vbsからバッチファイルを実行する時に、引数として変数を渡すことはできるでしょうか。バッチファイルは引数を受け取れる記述をしています。変数の値は常に変動します。 CreateObject("WScript.Shell").Run "C:\HULTOOL\test.bat",0 を使ってtest.batを実行しています。"C:\HULTOOL\test.bat aaa(aaa)は固定の数値ですという書き方で、バッチファイルがaaaを第一引数として受け取れることは試してできました。しかし、aaaを変数にすると成功しません。何かよい記述方法はあるのでしょうか。ご教授ください。

  • バッチファイルからVBAに引数を渡したい

    お世話になります。 a.batというバッチファイルがあります。 このファイルを起動させた時にABC.xlsというEXCELが起動するようにしたいのですが、その際にバッチファイル側から"1303"という文字列をabc.xlsに引数として渡したいのです。 EXCEL側ではauto_open(a)で待ち受けて、このaに"1303"が入ってmsgで"1303"と表示させたいのですが、引数は省略出来ません、というエラーが出てしまいます。 どなたかやり方をご教授いただけませんでしょうか?よろしくお願い致します。 環境 WindowsXP SP3 Excel2003 ============================== バッチファイル側 ============================== @echo off echo バッチファイルを実行します。 ABC.xls "1303" echo 終了しました。 ============================== EXCEL VBA側 ============================== Sub auto_open(a As String) Msg a end sub

  • バッチファイル 戻り値

    いつも大変御世話になっております。 WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。 "ABC.bat"------------------------------------------------- @ECHO ON set bat_name="ABC.bat" call DEF.bat echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 "ABC.bat"------------------------------------------------- 上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。 "DEF.bat"------------------------------------------------- @ECHO ON set bat_name="DEF.bat" exit /b 10 "DEF.bat"------------------------------------------------- 実行結果は予想していたものと違っていました。 予想していた実行結果 : "ABC.bat" は戻り値 10 を受け取りました。 実際の実行結果     : "DEF.bat" は戻り値 10 を受け取りました。】 %ERRORLEVEL%のみを取得したかったのですが DEF.bat の set bat_name="DEF.bat" までも取得してしまいました。 bat_name はどうしても "ABC.bat"とCALLする側の変数を使用したいのですが 制御は難しいでしょうか? echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 の直前に 再度 set bat_name="ABC.bat" と記述しなければダメでしょうか? 尚、都合上、ECHO文と変数名は変えたくありません。 もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • バッチより実行されるSQLについて

    あるバッチファイルからSQL文を実行します。 SQLの内容を簡単に申し上げますと テーブルAにレコードが1件存在したときは、 テーブルBを削除する。 テーブルAにレコードが2件存在したときは、 何もしない。 バッチファイルには、後続の処理もあるのですが 割愛します。 ここで質問なのですが、レコードが2件存在した とき、バッチの後続処理を実行させずに、そこで 処理終了とさせたいのですが、方法はあります でしょうか? SQL内でバッチのエラーレベルのようなものを 渡せたら、解決できそうなのですが、方法が わかりません。 説明があいまいでわかりにくいかもしれませんが 何か方法がありましたら、教えてください。

  • Transact-SQLからバッチを起動したい

    Transact-SQLからbatやvbsを起動したいです。 引数を付けて起動できますか? やり方、参考サイトを教えて下さい。 ヒントだけでも良いです。 環境は Windows 2008 R2 SQL Server 2005 です。 SQL Server 2008と違いがあるなら、 後学のために、SQL Server 2008でのやり方も 教えていただけると助かります。

専門家に質問してみよう