Создание сценариев базы данных в SQL Server Express - PullRequest
1 голос
/ 17 декабря 2009

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

У меня есть таблица FlowFolder, и нажатие Generate Scripts создает следующие два сценария:

dbo.FlowFolder.Table.sql:

USE [NC]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[FlowFolder](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ParentId] [dbo].[ParentId] NULL,
    [ParentType] [dbo].[CLRTypeName] NOT NULL,
    [Name] [dbo].[EntityName] NOT NULL,
    [Description] [dbo].[EntityDescription] NULL,
    [LastChanged] [int] NULL,
 CONSTRAINT [PK_FlowFolder] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
       ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

DF\_FlowFolder_LastChanged.Default.sql:

USE [NC]
GO
ALTER TABLE [dbo].[FlowFolder] ADD CONSTRAINT [DF_FlowFolder_LastChanged]  
            DEFAULT ((0)) FOR [LastChanged]
GO

Вопрос

  1. Почему SQL Server Express создает два файла?
  2. Почему он не помещает это ограничение как атрибут DEFAULT(0) в поле LastChanged в CREATE TABLE statement?
  3. Как заставить SQL Server генерировать консолидированный сценарий для каждого изменения, а не разбивать их на части?

EDIT:

Как мы генерируем скрипты. Сначала это был один файл. Но, к сожалению, SQLEXPRESS не сохраняет порядок объектов базы данных от сохранения к сохранению. Это означает, что даже небольшое изменение в схеме может привести к появлению сценария, значительно отличающегося от предшественника. Это очень неудобно, если вы хотите сравнить различия в схемах. Поэтому мы приняли другой подход. Мы генерируем скрипт для каждого объекта базы данных (не данных, а объекта схемы, такого как таблица, тип пользователя и т. Д.), А затем применяем небольшую утилиту, которая удаляет комментарий, вставленный SQLEXPRESS в каждый файл с указанием даты создания. После этого ясно видно, какие объекты схемы изменились от редакции к редакции.

В заключение, мы должны сгенерировать скрипт для каждой сущности схемы.

Об ограничениях DEFAULT (0) - нам на самом деле не нужно, чтобы они назывались ограничениями, поэтому размещение их в определении столбца хорошо.

1 Ответ

1 голос
/ 17 декабря 2009
  1. Вы выбрали "Файл на объект" на панели параметров вывода мастера?
  2. Поскольку вы не можете дать имена ограничений, когда они встроены в CREATE TABLE
  3. Убедитесь, что на панели параметров вывода выбран «Один файл», или попробуйте «Сценарий для нового окна запроса»

К сожалению, нужной вам функции не существует.

Всем ограничениям даны имена - даже безымянным ограничениям даны имена. SQL Server не отслеживает, какие имена он создал и какие вы создали, поэтому в процессе генерации сценариев он должен разделять их.

Обычно лучше управлять этим процессом в обратном порядке. Другими словами, есть коллекция файлов сценариев, которые вы объединяете вместе для создания БД. Таким образом, вы можете структурировать файлы скриптов так, как хотите. Team System Data Edition делает все это автоматически для вас. Обычный проект БД позволяет хранить их отдельно, но это больше работы на стороне развертывания.

...