为什么errorlevel仍为0

时间:2018-05-30 20:51:29

标签: sql-server batch-file

我正在尝试查询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...
)
)

1 个答案:

答案 0 :(得分:0)

这是SQLCMD常见问题解答。您需要为sqlcmd设置-b开关以设置ERRORLEVEL

  

-b指定sqlcmd退出并在发生错误时返回DOS ERRORLEVEL值。返回到DOS ERRORLEVEL的值   当SQL Server错误消息具有严重性级别时,变量为1   大于10;否则,返回的值为0.如果是-V选项   除了-b之外还设置了sqlcmd,如果是,则不会报告错误   严重性级别低于使用-V设置的值。命令提示符   批处理文件可以测试ERRORLEVEL的值并处理错误   适当。 sqlcmd不报告严重性级别10的错误   (信息性消息)。

a vector of references is not possible