Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQLCMD的返回值_Sql Server_Windows_Sqlcmd - Fatal编程技术网

Sql server SQLCMD的返回值

Sql server SQLCMD的返回值,sql-server,windows,sqlcmd,Sql Server,Windows,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 &

我需要检查通过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
中是否失败?

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

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

你需要使用

注意:这是大写的
-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
> 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
选项,该选项对执行具有不同的语义(整个批处理在第一个错误时停止)。YMMV

例如:

> SQLCMD.EXE -S whatever -E -V16 -Q "USE does_not_exist"
  Msg 911, Level 16, State 1, ...
  Could not locate entry ...
> echo %ERRORLEVEL%
  16
> 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
共同为我的问题提供了很好的解决方案。-m error\u level-控制向stdout发送哪些错误消息。发送严重性级别大于或等于此级别的邮件。当此值设置为-1时,将发送包括信息性消息在内的所有消息。在-m和-1之间不允许有空格。例如,-m-1有效,而-m-1无效。