BAT文件中的SQLCMD实用程序 - 如果语法错误,如何返回ERRORLEVEL

kov*_*alu 10 sql batch-file sqlcmd syntax-error

当某些.sql文件包含语法错误时,如何从SQLCMD实用程序获取%ERRORLEVEL%?这些文件创建存储过程.他们不会调用"raiseerror",但是他们可以控制语法错误,我需要终止进程.但它总是将%ERRORLEVEL%返回为0.我尝试使用-b,-V和-m(以及它们的组合),但没有按预期对我有效.

这是我的BAT文件的代码片段.

REM process all sql files in "SQL\scripts" folder and subfolders
FOR /R "SQL\scripts" %%G IN (*.sql) DO (
    sqlcmd -d %1 -S %2 -U %3 -P %4 -i "%%G" -b -V 1

    echo %ERRORLEVEL%
    IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
)
Run Code Online (Sandbox Code Playgroud)

mou*_*sio 11

你确实需要-b开关,但enabledelayedexpansion这样你就可以!errorlevel!在循环中使用并获得预期的结果.

setlocal enabledelayedexpansion在执行之前放置任何位置sqlcmd,可能最好在批处理的开头或循环之前.还要注意使用感叹号(!)而不是百分号(%),它表示使用延迟扩展.

[我也测试过if not errorlevel 0 …(不!,也没有%:见help if),但我无法得到预期的结果]