Обновите схему базы данных SQL Server с помощью обновления программного обеспечения - PullRequest
6 голосов
/ 22 сентября 2008

Как вы обновляете базу данных сервера SQL при установке обновления вашего продукта? Есть ли инструменты, которые будут интегрированы с установщиком Windows? Мои типичные изменения схемы:

  • Добавление / удаление столбцов
  • Добавление / удаление таблиц.
  • Добавление просмотров.
  • Добавление / изменение индексов.

Ответы [ 6 ]

4 голосов
/ 22 сентября 2008

По моему опыту, лучше делать обновления схемы БД, когда ваше программное обеспечение подключается к базе данных, а не во время установки. Вы хотите сделать следующие вещи:

  • Идентифицируйте каждое изменение схемы с помощью уникального идентификатора, такого как guid
  • Включите список всех изменений, которые вы можете применить к вашему продукту, например, скомпилированных в ресурс во время вашей сборки
  • Наличие таблицы в базе данных для хранения списка примененных изменений схемы
  • при подключении к базе данных отсканируйте эту таблицу, чтобы увидеть, нужны ли какие-либо изменения

Это достаточно просто сделать изнутри вашего работающего кода, но это не так просто сделать в вашем установщике.

2 голосов
/ 23 сентября 2008

Адам Коган рекомендует создать таблицу исправлений, которая используется для записи каждого обновления после вашего первоначального выпуска. Вместо того, чтобы изменять схему через SSMS или Enterprise Manager, убедитесь, что вы записываете каждое изменение ... оба приложения позволяют вам записывать изменения, а затем не применять их. Сохраните сценарии в файлы (возможно, добавьте их в качестве ресурсов), а затем просто проверяйте таблицу исправлений при каждом запуске приложения.

У Адама есть некоторые правила для улучшения баз данных SQL здесь

http://www.ssw.com.au/ssw/Standards/Rules/RulesToBetterSQLServerDatabases.aspx

1 голос
/ 22 сентября 2008

Не уверен насчет интеграции с установщиком Windows, но вы можете посмотреть на SQL Packager Red Gate

0 голосов
/ 22 сентября 2008

Я думаю, у вас есть для каждой версии вашего программного обеспечения куча обновлений базы данных. Почему бы вам не написать эти обновления в виде инструкции T-SQL, которая будет протестирована и выполнена при первом запуске новой версии вашего программного обеспечения? Просто откройте соединение с вашей базой данных из вашего программного обеспечения и отправьте инструкции DDL так же, как вы отправили бы любую инструкцию SELECT или UPDATE. Я также хотел бы сделать нечто похожее на то, что предлагает Джек Полсен: вести список этих инструкций T-SQL с помощью системы двойной идентификации: одна связана с версией базы данных / программного обеспечения, к которой она применяется (может быть uniqueIdentifier), другая (номер) для храните инструкции в последовательном порядке (см. мой пример: инструкция 2 не может быть выполнена до инструкции 1)

Пример:

//instruction 1, batch instructions for version#2.162
USE myDatabase
GO
ALTER TABLE myTable
    ADD myColumn uniqueIdentifier Null
GO
//instruction 2, batch instructions for version#2.162
USE myDatabase
ALTER TABLE myTable
    ADD CONSTRAINT myTable_myColumn FOREIGN KEY (myColumn) ...
GO

Полное описание инструкций ALTER, DROP и CREATE см. В справке T-SQL. Просто будьте осторожны (например), чтобы удалить Индексы и Ограничения, связанные с полем, перед удалением этого поля.

Конечно, вы можете добавить дополнительные инструкции ОБНОВИТЬ для вычисления значений для добавленных столбцов и т. Д.

Можно даже подумать о чем-то более сложном, проверяя, правильно ли были выполнены предыдущие шаги по обновлению (которые привели к версии базы данных # 2.161).

Мой совет: при написании этих инструкций T-SQL также следите за их «аналогами», чтобы вы могли в любое время (например, время отладки) понизить структуру вашей базы данных до предыдущей версии.

0 голосов
/ 22 сентября 2008

Возможно, вы захотите взглянуть на миграцию SubSonic . Во-первых, это отличный способ создания версии вашей БД. Во-вторых, не должно быть слишком сложно понять, как запустить те же самые сценарии из установщика.

0 голосов
/ 22 сентября 2008

InstallShield позволяет выполнять сценарии SQL как часть установки. Не пробовал, хотя, просто помните, что это было в графическом интерфейсе в последний раз, когда я смотрел!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...