当前位置: 首页 > 面试题库 >

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

佟颖逸
2023-03-14
问题内容

当某些.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%
)

问题答案:

您确实需要进行-b切换,但是与一起使用enabledelayedexpansion,可以!errorlevel!在循环内部使用并获得预期的结果。

setlocal enabledelayedexpansion在执行之前放任何地方sqlcmd,最好在批处理开始时或循环之前。另请注意,使用感叹号(!)代替百分号(%),这表示使用延迟扩展。

[我也用if not errorlevel 0 鈥�(no !,也没有任何人,%请参阅help if)进行了测试,但是我无法获得预期的结果]



 类似资料:
  • 问题内容: 我有一个适用于Django应用的命令行Python API。当我通过API访问该应用程序时,它应该返回JSON,而在浏览器中它应该返回HTML。我可以使用不同的URL访问不同的版本,但是如何只用一个模板在views.py中呈现HTML模板和JSON ? 要呈现HTML,我将使用: 但是如何在不放置JSON模板的情况下对JSON做同样的事情?(应为而不是) 什么将决定JSON和HTML输

  • 我试图在Java中创建一个方法,它打印fib序列,直到传递给该方法的数字。我的问题是,我需要使用int返回类型来返回序列,而我不能使用递归。

  • 我想用.bat运行一个jar文件(jar文件似乎不想自己打开,但现在这是一个不同的问题),但由于Java文件运行了很长时间,命令提示符仍处于打开状态(而.bat/.jar仍在运行) 我不想这样。 我在某处读到可以使用.cmd文件和以下命令: 若要在没有命令提示符的情况下运行bat文件,请执行以下操作。但那对我不起作用。当我单击.cmd程序时,它只是打开一个命令promopt,并在循环中反复打印“c

  • 我正在调用一个外部服务来获取,如果该服务不工作,我所需要的只是用填充值

  • 在PHP中,我使用flock创建了一个建议锁,如下所示: 在另一个进程中运行相同的代码将随后失败,因为锁是独占的。但是第二个进程能够运行: 但该文件仍被锁定,这已通过运行第三个进程确认。那么为什么解锁请求返回true呢?