21

我需要检查通过 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

4

2 回答 2

31

您需要使用该-V选项

注意:这是-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

于 2011-03-24T13:50:18.410 回答
2

我不确定,但是您是否尝试过 SQLCMD -m 开关?sqlcmd 实用程序

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

于 2011-03-24T12:08:43.043 回答