【问题标题】:Return value of SQLCMDSQLCMD 的返回值
【发布时间】:2011-03-24 11:54:20
【问题描述】:

我需要检查通过 SQLCMD 实用程序运行的查询的退出状态(成功/失败)。例如,我正在连接的服务器没有有一个数据库名称EastWind。然后,下面的命令失败并显示消息 ...

> "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
     -S ZEPHIR -E -Q "USE WestWind"
Changed database context to 'WestWind'.
> echo %errorlevel%
0
> "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
     -S ZEPHIR -E -Q "USE EastWind"
Database 'EastWind' does not exist. Make sure that the name is entered correctly
> echo %errorlevel%
0

我看到这两种情况下的返回值是相同的。如何检查 SQLCMD 中的命令是否失败?

【问题讨论】:

    标签: sql-server windows sqlcmd


    【解决方案1】:

    您需要使用-V option

    注意:这是大写的-V,而不是小写的-v

    例子:

    > SQLCMD.EXE -S whatever -E -V16 -Q "USE does_not_exist"
      Msg 911, Level 16, State 1, ...
      Could not locate entry ...
    > echo %ERRORLEVEL%
      16
    

    更新: 或者,您可以使用-b 选项,它与执行具有不同的语义(整个批处理在第一个错误时停止)。 YMMV。

    例子:

    > SQLCMD.EXE -S whatever -E -b -Q "USE does_not_exist"
      Msg 911, Level 16, State 1, ...
      Could not locate entry ...
    > echo %ERRORLEVEL%
      1
    

    您还可以组合-b-V

    【讨论】:

    • 谢谢克里斯蒂安。所有三个错误报告选项 -m, -V,-b 一起为我的问题提供了很好的解决方案。
    【解决方案2】:

    我不确定,但您是否尝试过 SQLCMD -m 开关? sqlcmd Utility

    -m error_level - 控制将哪些错误消息发送到标准输出。发送严重级别大于或等于此级别的消息。当此值设置为-1 时,将发送包括信息性消息在内的所有消息。 -m-1 之间不允许有空格。例如,-m-1 有效,-m -1 无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-12
      • 2012-05-12
      • 2016-02-20
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多