【问题标题】:How to exit from for loop if any itteration command failed in the loop如果循环中任何迭代命令失败,如何退出 for 循环
【发布时间】:2019-04-21 15:52:17
【问题描述】:

我正在将 sql dacpac 一个一个地部署在所有数据库上,方法是将它们放在文本文件中并使用 for loop,如果任何数据库失败,我想停止部署部署成功。

我创建了一个如下所示的批处理脚本

"SQLCMD.EXE" -S DB -U user -P password -Q "SELECT name FROM master.dbo.sysdatabases Where [name] NOT IN ('master', 'tempdb', 'model', 'msdb')" -o alldb.txt

for /f "delims=" %%x in (alldb.txt) do (
    "SqlPackage.exe" /Action:Publish /SourceFile:"dacpac" /TargetDatabaseName:"%%x" /TargetServerName:"DB" /TargetUser:"user" /TargetPassword:"password"
    if %errorlevel% neq 0 exit /b %errorlevel% 
)

当我运行这个批处理文件时,if 命令与sqlpackage.exe 命令一起执行,如下所示

"SqlPackage.exe" /Action:Publish /SourceFile:"dacpac" /TargetDatabaseName:"DB name" /TargetServerName:"DB" /TargetUser:"user" /TargetPassword:"password"

 if 0 neq 0 exit /b 0

所以即使之前的数据库部署失败了,也会在下一个数据库上开始部署。

我需要一种方法,如果任何 db 部署失败,它不应该在下一个 db 上开始部署,整个批处理脚本应该停止并在 for 循环中给出错误级别。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    以下语法对我有用。

    for /f "delims=" %%x in (alldb.txt) do (
       "SqlPackage.exe" /Action:Publish /SourceFile:"dacpac" /TargetDatabaseName:"%%x" /TargetServerName:"DB" /TargetUser:"user" /TargetPassword:"password" || echo ERROR && exit /b
    )
    

    【讨论】:

    • 你的意思可能是... || (echo ERROR & exit /b)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2022-01-09
    • 2020-06-19
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多