none
バッチから起動した場合のエラー判定処理 RRS feed

  • 質問

  • 御世話になっております。

    バッチからSQLを起動して、実行したSQLがエラーになった場合はバッチのそれ以降の処理をしない、という処理の仕組みをどのように作ればいいか教えていただけますでしょうか。

    SQLもバッチコマンドも初心者のため、最初から躓いており、きっかけでも教えていただければ幸いです。

    やりたいこと。

    start_del.batを実行すると、osqlでdel.sqlを実行します。

    制御がstart_del.batに戻ってきて、del.sqlkの実行結果がエラーの場合、次のcreate.sqlを実行させずにバッチを終了する、という流れです。

    ポイントとしては、バッチの中で osql -i.\del.sql -o c:\wk\log.txt -S gold -E が実行できたかではなく、del.sql の実行結果を判定するということです。

    *全てのSQLを1つのファイルにまとめることはしないというのが前提になります。

    よろしくお願いいたします。

    -----------------------------------------------------------
    実行するバッチの内容(start_del.bat)

    osql -i.\del.sql -o c:\wk\log.txt -S gold -E

    osql -i.\create.sql -o c:\wk\log.txt -S gold -E

    ----------------------------------------------------------------------

    ----------------------------------------------------------------------
    SQLの内容(del.sql)

    BEGIN TRANSACTION;

    DELETE FROM LDDB.dbo.test WHERE b='0';

    COMMIT TRANSACTION;

    2010年4月30日 13:50

回答

  • こんにちは、お役に立てそうなので。

    osql -i.\del.sql -o c:\wk\log.txt -S gold -E -b -n
    IF ERRORLEVEL 1 GOTO ERROR

    osql -i.\create.sql -o c:\wk\log.txt -S gold -E -b -n
    IF ERRORLEVEL 1 GOTO ERROR

    :ERROR

    こんな感じで出来る気がします。

    ※-b でエラー出力されるので、その後の行のIF ERRORLEVEL ・・・が生きて来ます。

    ちなみに、IF ERRORLEVEL は等号ではなく以上なので気を付けて下さい。

    ※成功した時を拾おうとすると、IF ERRORLEVEL 0 GOTO ・・・と書いてもエラーも拾ってしまいます。

    -n については、無いと osql 起動しっぱなしになりませんでしたっけ?

    はたして。

    2010年6月6日 7:08