【问题标题】:Writing error handler for SQL server instance down in a small batch file program在一个小批处理文件程序中为 SQL 服务器实例编写错误处理程序
【发布时间】:2013-04-30 17:33:01
【问题描述】:

我编写了一个小批处理文件,通过 sqlcmd 连接 15 个 SQL Server,并将 t-sql 查询的输出存储在 HTML 格式的输出文件中。当所有 SQL Server 都启动并运行时,脚本运行良好,但是每当 SQL Server 中的任何一个关闭时,就会在输出文件中保存以下错误 - “HResult 0xFFFFFFFF,级别 16,状态 1 SQL Server 网络接口:定位服务器/实例时出错指定 [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%
))

【问题讨论】:

  • 有什么问题 - 请提供错误详情
  • 问题是当服务器或 sql server 关闭时,代码无法识别错误级别,而不是进入 else 条件,它仍在记录错误“HResult 0xFFFFFFFF, Level 16, State 1 SQL Server Network接口:查找指定的服务器/实例时出错 [xFFFFFFFF]。”在 html 文件中

标签: batch-file sqlcmd


【解决方案1】:

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

IF %ERRORLEVEL%==0 (

但在循环中使用它会更好,它不需要百分号或延迟扩展。您必须以这种方式进行测试,因为错误级别 0 始终为真。

if not errorlevel 1 (

【讨论】:

  • 谢谢@foxidrive 我尝试使用%ERRORLEVEL%==0,但也没有给出结果,无论如何我会尝试使用其他选项if not errorlevel 1 ( 并让你知道
  • 你能建议如何以更好的方式回应关注吗?我不需要“”,因为它破坏了 html ECHO "&lt;tr&gt;&lt;tr rowspan=1&gt;&lt;td align=center bgcolor = gray rowspan=1&gt;&lt;b&gt;&lt;font face=verdana color=white size=1&gt;%%H&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;" &gt;&gt; %HTMLFILE%
  • 通过在 之前使用胡萝卜 ^ 字符也找到了解决方案
猜你喜欢
  • 1970-01-01
  • 2018-04-20
  • 2021-04-07
  • 2018-01-09
  • 2019-01-09
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
相关资源
最近更新 更多