在小型批处理文件程序中编写SQL Server实例的错误处理程序

时间:2013-04-29 18:58:38

标签: batch-file sqlcmd

我编写了一个小批处理文件,通过sqlcmd连接15个SQL Server,并将t-sql查询的输出存储在HTML格式的输出文件中。当所有SQL Server启动并运行时,脚本运行正常,但只要SQL Server中的任何一个关闭,然后跟随错误就会保存在输出文件中 - “HResult 0xFFFFFFFF,Level 16,State 1 SQL Server网络接口:找不到服务器/实例时出错指定[xFFFFFFFF]。“

我没有编写这样模糊的错误,而是尝试使用IF ELSE编写连接失败的错误处理程序,但它没有成功,需要帮助。

我尝试编写的用于错误处理的部分代码(如果SQL实例已关闭)如下所示,输入文本文件包含所有sql服务器的以下两个值 - > SQLinstancename,应用程序名称

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%
))

1 个答案:

答案 0 :(得分:0)

您从变量中省略了百分号。

IF %ERRORLEVEL%==0 (

但是在循环中你最好不要使用它,这不需要百分号或延迟扩展。你必须以这种方式测试,因为errorlevel 0总是为真。

if not errorlevel 1 (