Я генерирую сценарии изменений для своей базы данных, чтобы держать ее под контролем исходного кода, и каждый раз происходит странная вещь:
У меня есть таблица 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
Вопрос
- Почему SQL Server Express создает два файла?
- Почему он не помещает это ограничение как атрибут
DEFAULT(0)
в поле LastChanged
в CREATE TABLE statement?
- Как заставить SQL Server генерировать консолидированный сценарий для каждого изменения, а не разбивать их на части?
EDIT:
Как мы генерируем скрипты. Сначала это был один файл. Но, к сожалению, SQLEXPRESS не сохраняет порядок объектов базы данных от сохранения к сохранению. Это означает, что даже небольшое изменение в схеме может привести к появлению сценария, значительно отличающегося от предшественника. Это очень неудобно, если вы хотите сравнить различия в схемах. Поэтому мы приняли другой подход. Мы генерируем скрипт для каждого объекта базы данных (не данных, а объекта схемы, такого как таблица, тип пользователя и т. Д.), А затем применяем небольшую утилиту, которая удаляет комментарий, вставленный SQLEXPRESS в каждый файл с указанием даты создания. После этого ясно видно, какие объекты схемы изменились от редакции к редакции.
В заключение, мы должны сгенерировать скрипт для каждой сущности схемы.
Об ограничениях DEFAULT (0) - нам на самом деле не нужно, чтобы они назывались ограничениями, поэтому размещение их в определении столбца хорошо.