回答

收藏

BAT文件中的SQLCMD实用程序-如何在语法错误的情况下返回?ERRORLEVEL

技术问答 技术问答 195 人阅读 | 0 人回复 | 2023-09-14

当某些.sql当文件包含语法错误时,如何从SQLCMD在实用工具中获取%ERRORLEVEL%?创建和存储这些文件的过程。他们不会调用
% g: C* f( R% C) araiseerror但它们可以表示语法错误,所以我需要终止这个过程。但它将永远存在%ERRORLEVEL%回到0。我试着用它。-b,-V和-m(及其组合),但对我来说没有任何效果是预期的。% h4 ^/ F2 T$ V0 c6 i
这是我的BAT代码片段的文件。$ V! l* v8 r6 c# c3 @* C
REM process all sql files in "SQL\scripts" folder and subfoldersFOR /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 )                   ( \2 h3 B% v; L% j( {3 J2 [
    解决方案:                                                                8 A. i( D" I$ L5 A
                                                                你确实需要这样做-b切换,但一起使用enabledelayedexpansion,可以!errorlevel!在循环中使用并获得预期结果。
1 Z( t! w, K/ \7 t7 a% _setlocalenabledelayedexpansion执行前放在任何地方sqlcmd,最好在批处理开始或循环前。请注意,用感叹号(!)代替百分号(%),这意味着使用延迟扩展。/ J0 q+ A& U% I0 o  y
[我也用if not errorlevel 0 钬?(no !,没有人,请参考%help if)测试,但我得不到预期的结果]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则