У меня есть приложение, которое будет управлять выпусками изменений DDL и операторов TSql Executable для базы данных сервера SQL.
Основной рабочий процесс: разработчик отправляет файл .sql, файл собирается, проверяет SQL и назначает шаг в цикле выпуска, выпуск выполняется в базе данных с использованием хранимой процедуры, и он будет циклически повторять этапы выполнения SQLв рамках одной транзакции SQL с использованием sp_EXECUTESQL.Если возникают какие-либо ошибки, транзакция не фиксирует изменения DDL.Этот процесс управляет SQL из одной базы данных в несколько баз данных в одном экземпляре.
Проблема, с которой я столкнулся, заключается в том, что при отправке сценариев SQL они содержат операторы "GO", которые sp_EXECUTESQL не поддерживает, и выдают "Неправильно"синтаксис около 'GO' "ошибка.Я могу разделить и разбить большинство транзакций, анализируя ключевое слово «GO», но это не будет работать для элементов, находящихся в других базах данных.Когда у меня есть какой-то ALTER для другой базы данных, мне нужно «GO».например, следующее не может быть выполнено вместе, не может быть разделено и выполнено как два оператора:
USE [MyDatabaseOtherThanOneIAmExecutingFrom]
GO
Alter PROCEDURE [dbo].[DoSomething]
...
Синтаксически следующий оператор не будет работать, поэтому запрос разработчиков изменить свой sql на префикс с именем db будеттолько для не DDL SQL:
Alter PROCEDURE [MyDatabaseOtherThanOneIAmExecutingFrom].[dbo].[DoSomething]
Первоначальное требование заключалось в том, чтобы оставаться в базе данных для выполнения этих действий по развертыванию, поэтому не было возможности написать короткое одноразовое приложение для выполнения пакетов из .Net с использованием SqlCommand.
Есть ли другой вариант для обработки этого в базе данных или мне нужно выйти наружу и создать приложение для управления выполнением шагов SQL?