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 服务器的以下两个值 --> 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 始终为真。

if not errorlevel 1 (
于 2013-04-30T09:33:01.447 回答