0

そこで、OSQL クエリを利用する最初のバッチ スクリプトに取り組んでいます。これが私の現在のコードです:

setlocal enableDelayedExpansion
FOR /F %%G in (names.txt) DO  (
    :RESTARTER
    osql -b -D PCRServer -r -h-1 -s "," -i %%G.sql -o C:\SQLQurey\out\%%G.txt -U     SOMEUSER -P SOMEPASS
    if !ERRORLEVEL! NEQ 0 goto RESTARTER

)
endlocal

アイデアは、names.txt に実行する sql クエリのリストがあり、出力を同じ名前のファイルに吐き出し、後でマスター出力に連結できるというものです。

私が問題に直面しているのは、エラーチェック、特にデッドロックです。デッドロックが発生したときに私がやりたいことは、失敗したクエリを再実行してから、リストを下に進むこと です

私の考えでは、エラーレベルのチェックと goto を使えば、私がやりたいことはできるだろうということでした。代わりに、:RESTARTER に戻ると、%%G の値が失われ、永続的なエラー ループが発生します。

リスタータの外で別の変数を %%G の値に設定しようとしました...これが機能している間、クエリが正常に実行されると、元の FOR ループから抜け出して停止します。

それで、私の質問は、最後に失敗したコマンドを再試行し、names.txt の最後に到達するまで FOR ループを続行するようにスクリプトに指示するにはどうすればよいかということです。

編集:さて、実際の osql コマンドを別のバッチ ファイルに入れ、ループからそのバッチを呼び出して %%G をパラメーターとして渡すことで、機能させることができました。ただし、別のスクリプトを使用せずにこれを行う方法があるかどうかを知りたいと思っています。

4

1 に答える 1