Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Batch file 批处理文件中的Errorlevel不工作_Batch File_Sqlcmd - Fatal编程技术网

Batch file 批处理文件中的Errorlevel不工作

Batch file 批处理文件中的Errorlevel不工作,batch-file,sqlcmd,Batch File,Sqlcmd,我正在尝试使用带有批处理脚本的sqlcmd删除数据库。我面临的问题是,如果mytest数据库在sql中不可用,那么代码就没有进入errorhandler块 @echo off @echo IF ELSE DEMO sqlcmd -S <servername> -U <username> -P <password> -Q "DROP DATABASE Mytest" IF ERRORLEVEL 1 goto err_handler goto done :e

我正在尝试使用带有批处理脚本的sqlcmd删除数据库。我面临的问题是,如果mytest数据库在sql中不可用,那么代码就没有进入errorhandler块

@echo off
@echo IF ELSE DEMO
sqlcmd -S <servername> -U <username> -P <password> -Q "DROP DATABASE Mytest"  
IF ERRORLEVEL 1 goto err_handler
goto done

:err_handler
echo handle the error here
goto end

:done 
echo script completion code here

:end
@echo %Message%
pause
我的期望是:
  • 如果数据库可用,则应删除数据库,并应输入:done代码如果数据库不可用,则应输入:err_handler块

  • 我不想让Echo关闭消息

  • 发件人:

    错误报告选项

    -b

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

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

    -m错误\u级别

    控制将哪些错误消息发送到标准输出。具有 发送大于或等于此级别的严重性级别。 当此值设置为-1时,所有消息包括信息 消息,则会被发送。在-m和-1之间不允许有空格。对于 例如,-m-1有效,而-m-1无效

    此选项还设置sqlcmd脚本变量SQLCMDERRORLEVEL。 此变量的默认值为0

    -V错误\u严重性\u级别

    控制用于设置错误级别的严重性级别 变量严重级别大于或的错误消息 等于此值设置错误级别。小于0的值为 报告为0。批处理和CMD文件可用于测试 ERRORLEVEL变量

    您需要使用默认值从数据库中获取错误。如果没有它们,您看到的
    errorlevel
    是指执行的
    sqlcmd
    实例(应该是
    0
    ,因为它已成功执行),而不是数据库中运行的命令

    另外,如前所述,
    回显已关闭。
    消息由您的

    echo %Message%
    
    变量未定义时。该行被解析并转换为

    echo 
    

    因为
    %Message%
    没有值。不带参数的
    echo
    命令的行为是输出
    echo
    状态。

    尝试在
    sqlcmd…
    行之后直接添加一行
    echo errorlevel=%errorlevel%
    ,该行将显示返回的errorlevel。惯例是0=成功,但惯例有时会被打破。成功删除数据库时返回的错误级别是什么?出现
    回音关闭
    是因为您没有为
    消息
    分配任何内容,因此
    回音
    将报告其状态(关闭,因为您首先执行
    @echo off
    )-解决方案是为
    消息
    分配一个值。感谢您的回复。它显示两种情况下的errorlevel=0(如果DB可用,如果DB不可用)
    echo