我为我的数据库生成更改脚本以使其保持在源代码控制之下,每次都会发生奇怪的事情:
我有一个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
DEFAULT(0)
属性放在LastChanged
CREATE TABLE statement?
字段中
修改
我们如何生成脚本。起初,它只是一个文件。但是,不幸的是,SQLEXPRESS没有将数据库实体的顺序从保存保存到保存。这意味着,即使模式中的一个小变化也可能导致脚本与前一个版本大不相同。如果想要比较模式中的差异,这是非常不方便的。因此我们采用了另一种方法我们为每个数据库实体生成脚本(不是数据,而是模式实体,如表,用户类型等等),然后应用一个小实用程序,删除SQLEXPRESS在每个文件中插入的注释,说明生成日期。之后,可以清楚地看到哪些模式实体已从修订版更改为修订版。
总之,我们必须为每个模式实体生成脚本。
关于DEFAULT(0)约束 - 我们实际上不需要将它们命名为约束,因此将它们放在列定义上就可以了。
答案 0 :(得分:1)
CREATE TABLE
不幸的是,您正在寻找的功能不存在。
所有约束都给出了名称 - 即使是未命名的约束也会给出名称。 SQL Server不会跟踪它创建的名称以及您创建的名称,因此在脚本生成过程中,它必须将它们拆分。
通常,反向管理此过程会更好。换句话说,将一组脚本文件组合在一起以创建数据库。这样,您可以根据需要构建脚本文件。 Team System Data Edition会自动为您完成此操作。常规数据库项目允许您将它们分开,但它在部署方面的工作量更大。