Я развертываю 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
поэтому развертывание начнется на следующем БД, даже если предыдущее развертывание БД было неудачным.
Мне нужен способ, чтобы в случае, если какой-либо БД не удалось развернуть, он не должен запускать развертывание на следующей БД, и весь пакетный скрипт должен остановиться и задать уровень ошибки для цикла.