Как мне создать версию базы данных SQL Server? - PullRequest
12 голосов
/ 16 января 2009

Мне нужно поместить версии в базу данных SQL Server 2005, чтобы они были доступны из приложения .NET. Я думал об использовании расширенных свойств базы данных с именем «версия», и, конечно, значением будет версия базы данных. Затем я могу использовать SQL, чтобы добраться до этого. Мой вопрос звучит как хороший план или есть лучший способ добавить версии в базу данных SQL Server?

Предположим, я не могу использовать таблицу для хранения метаданных.

Ответы [ 5 ]

11 голосов
/ 16 января 2009

Я делаю это:

Создать таблицу схемы:

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

Адаптировано из того, что я прочитал в Ужасы кодирования

6 голосов
/ 16 января 2009

Мы используем расширенные свойства, как вы описали, и они работают очень хорошо.

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

Я также использовал некоторые инструменты ER-диаграмм, чтобы отслеживать изменения в версиях БД. Это было за пределами реального приложения, но позволило мне быстро увидеть, что изменилось.

Я думаю, это был CASEStudio или что-то в этом роде.

2 голосов
/ 16 января 2009

Если я правильно понимаю ваш вопрос (различие между внутренними версиями базы данных, например номерами сборок приложений), вы можете иметь какую-то таблицу SYSVERSION, в которой содержится одна строка данных с этой информацией.

Проще запросить.

Может также содержать несколько столбцов полезной информации или несколько строк, представляющих разное время обновления копии базы данных.

Обновление: Что ж, если вы не можете использовать таблицу для хранения метаданных, то подойдет внешняя информация некоторого вида (файл INFO на жестком диске?) Или расширенные свойства. идти.

Мне все еще нравится идея таблицы :) Вы всегда можете использовать безопасность, чтобы сделать ее доступной только через пользовательский хранимый процесс get_db_version или что-то в этом роде.

0 голосов
/ 18 июля 2013

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

Вот полное решение с примерами и соглашениями при написании сценариев изменения базы данных: Как поддерживать версию схемы базы данных SQL Server

0 голосов
/ 30 ноября 2011

Лучший способ сделать это - это иметь 2 процедуры: один заголовок для контроля того, что вставляется, и валидацию нижнего колонтитула для вставки данных, если релиз хорош или нет. Тело будет содержать ваши сценарии.

Вам нужна оболочка, которая будет инкапсулировать ваш сценарий и записывать всю информацию: по мере выпуска, номер сценария был применен, applyby, datedate date, результат выпуска «провалился или успешно»

...