Windows サーバー エンタープライズ システム SP2 で DOS 6.0.6002 を実行しています。SQL Server 2008 R2 (10.50.4000) DOS でメイン コントロール プログラムを使用しています。sqlcmd を使用して SQL プログラムを呼び出しています。簡略化されたバージョンは次のようになります。
set sqlsvr=myServer
set logfile=logfile.txt
sqlcmd -S %sqlsvr% -d myDB -i import_some_stuff.sql > "%logfile%" 2>&1
echo error level = %ERRORLEVEL%
このプログラムはかなり堅牢である必要があります。多くのファイルとテーブルに対して毎日実行する必要があります。失敗した場合は、キャッチしてシステム管理者に通知する必要があります。とりあえず捕まえるだけ。
これをテストするために、次のテストを試しました。
1) ファイルの名前を存在しない名前に変更します。結果: errorlevel 1 が返されます (つまり、エラーをキャッチしました!) ブラボー!
2) sql プログラムの先頭に構文上のゴミを入力します。結果: ログ ファイルにエラー メッセージが出力されますが、エラーは返されません (したがって、%ERRORLEVEL% の戻り値はゼロです。これは信じられないことのように思えます。何が欠けているのでしょうか?