SQLCMD的返回值

mut*_*gan 14 sql-server dos sqlcmd

我需要检查通过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
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*n.K 20

您需要使用该-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
Run Code Online (Sandbox Code Playgroud)

更新:您也可以使用该-b选项.它与执行具有不同的语义(整个批处理停止在第一个错误上).因人而异.

例:

  > SQLCMD.EXE -S whatever -E -b -Q "USE does_not_exist"
  Msg 911, Level 16, State 1, ...
  Could not locate entry ...
  > echo %ERRORLEVEL%
  1
Run Code Online (Sandbox Code Playgroud)

您还可以结合-b-V.