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

前端之家收集整理的这篇文章主要介绍了BAT文件中的SQLCMD实用程序 – 如果语法错误,如何返回ERRORLEVEL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当某些.sql文件包含语法错误时,如何从sqlCMD实用程序获取%ERRORLEVEL%?这些文件创建存储过程.他们不会调用“raiseerror”,但是它们可以让conatin语法错误,我需要终止进程.
但是它总是返回%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%
)

解决方法

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

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

[我也测试了如果不是错误级别0 …(不,也没有任何%:看到帮助,如果),但我无法得到所需的结果]

猜你在找的MsSQL相关文章