从DOS测试和控制错误

时间:2013-03-22 15:41:37

标签: error-handling batch-file sqlcmd

我在Windows服务器企业系统SP2上运行DOS 6.0.6002。 SQL Server 2008 R2(10.50.4000) 我在DOS中有一个主控制程序。 我正在通过sqlcmd调用一个sql程序。 简化版本如下所示:

set sqlsvr=myServer
set logfile=logfile.txt
sqlcmd -S %sqlsvr%  -d myDB -i import_some_stuff.sql > "%logfile%" 2>&1
echo error level = %ERRORLEVEL%

我需要这个程序非常健壮。它必须每天对很多文件和表格运行。如果失败,我需要捕获它并通知sysadmin。现在,抓住它。

为了测试这个,我尝试了以下测试:

1)将文件重命名为不存在的文件。   结果:它返回并且errorlevel为1(即它捕获了错误!)bravo!

2)在sql程序的前面键入一些语法垃圾。   结果:它在日志文件中打印错误消息,但它不会返回错误(因此%ERRORLEVEL%中的返回值为零。这对我来说似乎不可思议。我缺少什么?

1 个答案:

答案 0 :(得分:1)

尝试使用sqlcmd的-b选项:

  

<强> -b

     

指定sqlcmd在退出时退出并返回DOS ERRORLEVEL值   发生错误。   返回到DOS ERRORLEVEL的值   当SQL Server错误消息具有严重性级别时,变量为1   大于10;否则,返回的值为0.如果是-V选项   除了-b之外还设置了sqlcmd,如果是,则不会报告错误   严重性级别低于使用-V设置的值。命令提示符   批处理文件可以测试ERRORLEVEL的值并处理错误   适当。 sqlcmd不报告严重性级别10的错误   (信息性消息)。

     

如果sqlcmd脚本包含错误的注释,则语法错误,   或者缺少脚本变量,返回的ERRORLEVEL为1。

以下是documentation