我正在将所有 sql dacpac 部署到所有数据库中,方法是将它们放在文本文件中并用于 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
因此,即使先前的数据库部署失败,部署也将在下一个数据库开始。
我需要一种方法,如果任何数据库部署失败,则不应在下一个数据库上开始部署,并且整个批处理脚本应停止并在for循环中提供错误级别。
答案 0 :(得分:0)
以下语法对我有用。
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
)