Как мне изменить базу данных 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