откат изменений базы данных с помощью утилиты sqlcmd

#azure-devops #azure-pipelines #azure-pipelines-release-pipeline #sqlcmd #invoke-sqlcmd

#azure-devops #azure-конвейеры #azure-pipelines-release-pipeline #sqlcmd #вызов -sqlcmd

Вопрос:

У меня есть конвейер выпуска, который применяет изменения базы данных с помощью ‘SqlCmd.exe «. Я пытаюсь выполнить хранимую процедуру с помощью этой утилиты командной строки:

 /opt/mssql-tools/bin/sqlcmd -S tcp:$(Server) -d $(Database) -U $(UserName) -P '$(Password)' -b -i "$(ScriptFile)"
  

Как только что-то пойдет не так в файле сценария, я хочу SQLCMD.EXE автоматически откатывайте все изменения.

Я должен упомянуть, что внутри файла сценария нет управления ТРАНЗАКЦИЯМИ.

Пожалуйста, помогите мне узнать, как это решить.

Комментарии:

1. Привет, у вас была возможность проверить приведенный ниже ответ, как все прошло в этом случае?

Ответ №1:

Вероятно, вам придется добавить транзакции отката в файл сценария. В конвейере выпуска Azure нет конфигураций для управления поведением отката. Смотрите Пример здесь, чтобы добавить транзакции в сценарии.

Если вы не хотите добавлять транзакции в файл сценария. Вы можете попробовать добавить задачу poweshell в сценарий запуска конвейера выпуска, приведенный ниже, чтобы добавить BEGIN TRANSACTION и END TRANSACTION к содержимому вашего запроса.

 $fullbatch = @()
$fullbatch  = "BEGIN TRANSACTION;"

$fullbatch  = Get-Content $(ScriptFile)
 
$fullbatch  = "COMMIT TRANSACTION;"

sqlcmd -S tcp:$(Server) -d $(Database) -U $(UserName) -P '$(Password)' -b -Q "$fullbatch"
  

Смотрите Пример в этой теме.