【发布时间】: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