#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"
Смотрите Пример в этой теме.