Windows脚本以识别SQL的返回消息,然后倒计时循环



我是编码世界的新手,我正在通过Windows脚本开始自学。我目前卡住了。

我正在使用Windows脚本将数据库放在SQL Express中。但是,如果数据库未下降,我需要脚本识别响应,以便它可以触发倒计时循环。循环完成后,我向用户发送了一条消息,即3尝试丢弃DB失败。

因此,如果数据库未能下降,并且我们收到SQL的响应,我需要脚本来捕获它。

这是一个示例响应:MSG 3701,级别11,状态1,服务器SDFRLPOS003 SQLEXPRESS,第1行无法删除数据库"数据存储",因为它不存在或您没有许可。

我不需要脚本来识别SQL的特定响应,只是从SQL中获得任何响应。

我的脚本正朝着SQL的响应(有意绘制)的响应工作。我可以看到响应,然后脚本终止。

任何帮助都将不胜感激!


基于上面的示例响应,我尝试使用:

if "%ERRORLEVEL%"=="11" set /a loopcount=loopcount-1
if "%ERRORLEVEL%" > "0" set /a loopcount=loopcount-1
if "%Msg%"=="3701" set /a loopcount=loopcount-1

这是我拥有的:

:SQLDropDBStart 
cls
set loopcount=4
:Loop
echo    Deleting DBName Database...     
sqlcmd -S .SQLEXPRESS -U XXX -P XXX -Q "drop database DBName"
    <<<I DON"T KNOW WHAT TO PUT RIGHT HERE>>>
if %loopcount%==0 goto unableToDropDB
goto    successfulDBDrop    

我需要脚本来尝试将数据库删除直到循环完成。在循环结束时,它将goto一条消息,即无法删除数据库并将下一步提供给用户。

:SQLDropDBStart
cls
set loopcount=4
:Loop
echo    Deleting DBName Database...
sqlcmd -b -S .SQLEXPRESS -U XXX -P XXX -Q "drop database DBName"
rem Error is not 1 or greater (success).
if not errorlevel 1 goto successfulDBDrop
rem Decrease count.
set /a "loopcount-=1"
rem End loop (fail).
if %loopcount% equ 0 goto unableToDropDB
rem Sleep time.
ping localhost -n 3 >nul
rem Another loop.
goto :loop

使用if not errorlevel 1,不超过1个或更高。小于1使goto successfulDBDrop发生。

如果errorlevel是1或更高,则loopcount为减少1。 然后检查loopcount是否为0,如果是,则goto unableToDropDB发生。

使用ping(或者您可以使用timeout)完成一些睡眠时间。

查看if /?有关检查errorlevel号码的更多信息。

我还添加了-b参数为SQLCMD实用程序页面:

-b

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

没有-b,可能不会设置errorlevel

相关内容

最新更新