我正在尝试查询CMS上的每个实例。但是,当我测试停止的实例时,为什么errorlevel仍为0?如何跳过Instance_list.txt中的最后一行(%% a将为'(44')
:Start
REM get the full list of our instance from CMS to Instance_list.txt
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd" -S cms_instance -e -d msdb -Q "SELECT DISTINCT server_name FROM sysmanagement_shared_registered_servers_internal" -o Instance_list.txt
:Run
REM Run query against all instances one by one.
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2 skip=3" %%a in (Instance_list.txt) do (
Set Intance_NAME=%%a
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd" -S !Intance_NAME! -e -d master -Q "SELECT @@SERVERNAME" -o SQL_result.txt
TIMEOUT /T 2
FINDSTR "!Intance_NAME!" SQL_result.txt
IF %ERRORLEVEL% NEQ 0 (
ECHO SQL INSTANCE !Intance_NAME! HAS SOME ISSUE...
)
)
答案 0 :(得分:0)
这是SQLCMD常见问题解答。您需要为sqlcmd设置-b开关以设置ERRORLEVEL
-b指定sqlcmd退出并在发生错误时返回DOS ERRORLEVEL值。返回到DOS ERRORLEVEL的值 当SQL Server错误消息具有严重性级别时,变量为1 大于10;否则,返回的值为0.如果是-V选项 除了-b之外还设置了sqlcmd,如果是,则不会报告错误 严重性级别低于使用-V设置的值。命令提示符 批处理文件可以测试ERRORLEVEL的值并处理错误 适当。 sqlcmd不报告严重性级别10的错误 (信息性消息)。