Как мне изменить базу данных SQL Server?
Мне нужно поместить версии в базу данных SQL Server 2005 и получить их из приложения .NET. То, о чем я думал, это использование расширенных свойств в базе данных с именем "версия", и, конечно, значение будет версией базы данных. Затем я могу использовать SQL для этого. Мой вопрос заключается в том, что это звучит как хороший план или есть лучший способ добавления версий в базу данных SQL Server?
Предположим, что я не могу использовать таблицу для хранения метаданных.
Ответы
Ответ 1
Я делаю это:
Создайте таблицу схем:
CREATE TABLE [dbo].[SchemaVersion](
[Major] [int] NOT NULL,
[Minor] [int] NOT NULL,
[Build] [int] NOT NULL,
[Revision] [int] NOT NULL,
[Applied] [datetime] NOT NULL,
[Comment] [text] NULL)
Схема обновления:
INSERT INTO SchemaVersion(Major, Minor, Build, Revision, Applied, Comment)
VALUES (1, 9, 1, 0, getdate(), 'Add Table to track pay status')
Получить версию схемы базы данных:
SELECT TOP 1 Major, Minor, Build from SchemaVersion
ORDER BY Major DESC, Minor DESC, Build DESC, Revision DESC
Адаптировано из того, что я читал на Ужас кодирования
Ответ 2
Мы используем расширенные свойства, как вы описали его, и он работает очень хорошо.
Я думаю, что таблица слишком переполнена. Если я хочу отслеживать различия в моих базах данных, я использую источник управления и сохраняю все сценарии генерации db.
Я также использовал некоторые инструменты диаграммы ER, чтобы помочь мне отслеживать изменения в версиях БД. Это было вне фактического приложения, но это позволило мне быстро увидеть, что изменилось.
Я думаю, что это CASEStudio, или что-то в этом роде.
Ответ 3
Если я правильно понимаю ваш вопрос (дифференцируя внутренние версии базы данных, такие как номера сборки приложений), у вас может быть какая-то таблица SYSVERSION, в которой содержится одна строка данных с этой информацией.
Легче запросить.
Также может содержать несколько столбцов полезной информации или несколько строк, которые представляют разные времена, когда была обновлена копия базы данных.
Обновление: Ну, если вы не можете использовать таблицу для хранения метаданных, то либо внешняя информация какого-либо типа (INFO файл на жестком диске?), либо расширенные свойства будут путь.
Мне все еще нравится идея таблицы, хотя:) Вы всегда можете использовать безопасность, чтобы сделать ее доступной только через пользовательский хранимый proc get_ db_version или что-то в этом роде.
Ответ 4
Лучший способ сделать это состоит в том, чтобы иметь 2 процедуры: один заголовок для управления вставленным и проверка нижнего колонтитула для вставки данных, если выпуск хорош или нет. Тело будет содержать ваши скрипты.
Вам понадобится оболочка, которая будет инкапсулировать ваш script и запишет всю информацию: по мере выпуска, номер script был применен, применить, применить дату дат, результат выпуска "не удалось или удалось".
Ответ 5
Я использую выделенную таблицу, аналогичную решению Matt. В дополнение к этому, изменения базы данных должны проверять текущую версию перед внесением каких-либо изменений в схему. Если текущая версия меньше ожидаемой, то script завершается фатальной ошибкой. Если текущая версия больше ожидаемой, то script пропускает текущий шаг, потому что этот шаг уже выполнялся иногда в прошлом.
Вот полное решение с примерами и соглашениями при написании скриптов базы данных: Как поддерживать версию схемы базы данных SQL Server