1

sqlcmd を介して 15 の SQL Server に接続し、t-sql クエリの出力を HTML 形式の出力ファイルに保存する小さなバッチ ファイルを作成しました。すべての SQL Server が稼働している場合、スクリプトは正常に実行されますが、いずれかの SQL Server がダウンしている場合は常に、次のエラーが出力ファイルに保存されます - "HResult 0xFFFFFFFF, Level 16, State 1 SQL Server Network Interfaces: Error Locating Server/Instance [xFFFFFFFF]を指定しました。」

このようなあいまいなエラーを書く代わりに、IF ELSE を使用して接続失敗のエラー ハンドラーも記述しようとしましたが、うまくいきませんでした。助けが必要です。

エラー処理 (SQL インスタンスがダウンしている場合) のために記述しようとしたコードの一部は次のとおりです。入力テキスト ファイルには、すべての SQL サーバーに対して次の 2 つの値が含まれています --> SQLinstancename,Application name

FOR /F "tokens=1,2 delims=," %%G in (%CD%\SQLServerList_SQLReport.txt) DO (
sqlcmd -E -S %%G -q "exit(select @@servername)"
IF ERRORLEVEL==0 (
sqlcmd -E -S %%G -i %MainSCRIPT% -v appname = "%%H" >> %HTMLFILE%
) ELSE (
ECHO "<tr><tr rowspan=1><td align=center bgcolor = gray rowspan=1><b><font face=verdana color=white size=1>%%H</font></b></td>" >> %HTMLFILE%
ECHO "<td align=center rowspan=1><font face=verdana size=1>%%G</font></td>" >> %HTMLFILE%
ECHO "<td align=center colspan =6 rowspan=1><font face=verdana size=1 color=RED><b>Unable to connect to SQL Server, check the connectivity*</b></font><tr></tr><tr></tr>" >> %HTMLFILE%
))
4

1 に答える 1

0

変数からパーセント記号を省略しました。

IF %ERRORLEVEL%==0 (

しかし、ループでは、パーセント記号や遅延展開を必要としないこれを使用したほうがよいでしょう。エラーレベル 0 は常に true であるため、この方法でテストする必要があります。

if not errorlevel 1 (
于 2013-04-30T09:33:01.447 に答える