Error handling DOS下的错误测试与控制

Error handling DOS下的错误测试与控制,error-handling,batch-file,sqlcmd,Error Handling,Batch File,Sqlcmd,我正在windows server企业系统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

我正在windows server企业系统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) 将文件重命名为不存在的文件。 结果:它返回错误级别1(即它捕获了错误!)太棒了

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

尝试使用sqlcmd的
-b
选项:

-b

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

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


以下是

健壮脚本和批处理脚本不能很好地结合在一起…为什么不像powershell或perl或…?cmd.exe是一个windows控制台模式的程序,与DOS没有任何关系。相似之处纯粹是表面上的。我没有意识到这一点,Bill。谢谢你的更正。@elbillaf如果它解决了你的问题,你可以可能想把这个标记为答案。