Команда разработчиков, с которыми я работаю, использует SQL Data Projects для большой работы, которую мы должны делать против существующей базы данных. Мы находимся несколько недель, и было несколько ошибок, но опыт был в целом хорош.SQL Server ScriptDom Parsing
Однако, когда мы добираемся до развертывания, команда dba отказалась принимать DACPAC как метод развертывания. Вместо этого они хотят видеть традиционный скрипт для DML или DDL-оператора.
Нынешнее мышление заключается в создании разностного скрипта между готовым проектом SQL и производственной средой, а затем разобрать его на отдельные скрипты. Нехорошо знаю.
Чтобы разобрать разница сценарий, кажется, два варианта:
- Разобрать скрипт на основе команды пакетного сепаратора, GO. Это довольно простые решения, но они обещают.
- Или используйте Microsoft.SqlServer.TransactSql.ScriptDom. Это выглядит более перспективным, но кажется гораздо более сложным.
В настоящий момент я тестирую ScriptDom, но мне трудно понять его. Мои текущие, но не только проблемы, заключаются в следующем.
Я пытаюсь разобрать следующий SQL с помощью ScriptDOM в C#:
CREATE TABLE dbo.MyTable
(
MyColumn VARCHAR(255)
)
Но не могу видеть, как получить доступ размера VARCHAR, в этом случае 255.
Код I» м используется следующим образом:
TSqlFragment sqlFragment = parser.Parse(textReader, out errors);
SQLVisitor myVisitor = new SQLVisitor();
sqlFragment.Accept(myVisitor);
public override void ExplicitVisit(CreateTableStatement node)
{
// node.SchemaObjectName.Identifiers to access the table name
// node.Definition.ColumnDefinitions to access the column attributes
}
Из каждого определения столбца я ожидал найти свойство длины или подобное. Тем не менее, у меня также есть подозрение, что вы можете использовать шаблон посетителя, с которым я сталкиваюсь, для повторного анализа каждого определения столбца. Любые идеи?
У нас есть все шаги, которые вы упомянули выше, хотя есть «обсуждения» с использованием SQL Test Project, но я отвлекаюсь. Проблемы, которые у меня есть, это то, что dba хочет, чтобы один файл сценария изменялся не на один скрипт со всеми изменениями. Среди множества параметров, которые вы можете передать в SQLPackage, я не видел, чтобы один из них указывал использование нескольких выходных файлов. Следовательно, необходимо проанализировать вывод SQLPackage. В любом случае. –
1 скрипт за изменение? это даже не имеет смысла - если у вас есть сто изменений, они хотят запустить 100 скриптов? В каком порядке они будут запускать их и что вы будете делать с пост-развертывающими сценариями. Я попытался бы выяснить, как заставить их принять один сценарий развертывания, иначе вы просите мир боли (для них и для вас) –
Я могу только согласиться с тем, что это не имеет большого смысла. У команды dba есть домашний инструмент, который они используют для запуска скриптов. Разработчики должны завершить распространение Excel, определяющее местоположение в системе управления версиями, порядок запуска сценариев, целевой сервер и базу данных. Затем DBA используют это для развертывания изменений. Затем скрипты вывода становятся доступными для разработчиков. Это нормально для команды dba, поскольку это делает их жизнь простой, но для разработчиков это боль. Отсюда причина, по которой команда DBA не спешит искать лучшее решение, такое как dacpac. –