Sup*_*NES 16 windows error-handling batch-file sqlcmd
我有一个批处理文件,使用sqlcmd运行一些SELECT查询,将结果放入文本文件,并将这些文件上传到FTP服务器.这一切都按照它应该的方式工作,这就是我喜欢的工作方式.
不过,我一直想知道在发生错误时我会怎么做.假设某人更改了我正在点击的数据库的数据结构,但没有通知我.如果我运行sqlcmd SELECT语句并将结果放入文本文件中,我最终会得到一个包含错误的文本文件,然后直接进入FTP就好像没有错.(我已经测试了这个.)
我希望能够检查来自sqlcmd的错误 - 超时,错误的凭据,格式错误的查询等等,我只是不确定这是怎么做的或者"最佳实践"是什么.我总是可以尝试抓取输出文本文件并搜索我认为可能发生的错误,但由于各种原因这是有问题的.
任何人都有这方面的经验,他们想分享?
dcp*_*dcp 13
您可以检查errorlevel返回SQLCMD来查看它是否失败.
sqlcmd -b <yourscript>
IF ERRORLEVEL 1 goto err_handler
goto done
:err_handler
REM handle the error here
:done
REM script completion code here
Run Code Online (Sandbox Code Playgroud)
我可能会开始在SQL中放置返回值,如下所示:
DECLARE @IsBored bit = 1
... do work ...
SELECT 0 -- Success!
Run Code Online (Sandbox Code Playgroud)
您可以进一步使用TRY/CATCH块来捕获错误并返回错误代码.使用SQLCMD,您可以使用SQL中的返回代码作为应用程序的退出代码,如下所示:
sqlcmd -b -S ServerName -E -d DbName -q "EXIT(EXEC dbo.YourProc)"
-o "C:\Logs\output.log" -u
Run Code Online (Sandbox Code Playgroud)
如果您使用调度程序等方式管理SQLCMD调用,则可以根据SQLCMD的返回代码执行操作.由于您只是使用批处理文件,我认为您可以这样做:
@ECHO OFF
sqlcmd -b -S ServerName -E -d DbName -q "EXIT(EXEC dbo.YourProc)"
-o "C:\Logs\output.log" -u
IF %ERRORLEVEL% NEQ 0 ECHO "Error"
Run Code Online (Sandbox Code Playgroud)
祝好运!