我目前正在为我们的数据库创建一个主ddl。 从历史上看,我们使用备份/恢复来对数据库进行版本控制,而不是维护任何ddl脚本。 架构非常大。

我目前的想法:

  • 将脚本分成几部分(可能在单独的脚本中):

    1. 表创建
    2. 添加索引
    3. 添加触发器
    4. 添加约束
  • 每个脚本都会被主脚本调用。

  • 我可能需要一个脚本暂时删除约束以进行测试
  • 架构中可能存在孤立表,我计划识别可疑表。

还有其他建议吗?

编辑:此外,如果有人知道自动化部分过程的好工具,我们正在使用MS SQL 2000(旧的,我知道)。

===============>>#1 票数:5

我认为基本的想法是好的。

首先构建所有表然后构建所有约束的好处是可以按任何顺序创建表。 当我这样做时,每个表有一个文件,我把它放在一个名为“Tables”的目录中,然后是一个执行该目录中所有文件的脚本。 同样,我有一个约束脚本的文件夹(它也做了外键和索引),它们是在构建表之后执行的。

我会将触发器和存储过程的构建分开,然后运行它们。 关于这些的重点是它们可以在数据库上运行和重新运行而不会影响数据。 这意味着您可以像普通代码一样对待它们。 您应该在每个触发器和过程脚本的开头包含“if exists ... drop”语句,以使它们可以重新运行。

所以订单就是

  1. 表创建
  2. 添加索引
  3. 添加约束

然后

  1. 添加触发器
  2. 添加存储过程

在我当前的项目中,我们使用MSBuild来运行脚本。 您可以获得一些扩展目标 ,允许您调用sql脚本。 在过去我使用的perl也很好(和批处理文件......我不推荐 - 太有限了)。

===============>>#2 票数:1

有一个巧妙的工具将遍历整个sql服务器并将所有表,视图,存储的进程和UDF定义作为SQL脚本(文本文件)提取到本地文件系统。 我在2005年和2008年使用过它,不知道它如何与2000一起使用。 查看http://www.antipodeansoftware.com/Home/Products

===============>>#3 票数:1

你在那里的东西似乎很不错。 我的公司有时会为足够大的数据库进一步细分,可能是针对单个对象级别。 这样每个table / index / ...都有自己的文件。 可以有用,可能有点矫枉过正。 真的取决于你如何使用它。

@Justin

通过域名大多总是足够的。 我同意以这种方式处理时有一些复杂的问题,但这应该很容易处理。

我认为这种方法提供了更多的分离(在大型数据库中你会得到欣赏),同时仍然使自己非常易于管理。 我们还编写Perl脚本来处理这些DDL文件的大量处理,因此这可能是一种处理它的好方法。

===============>>#4 票数:1

花时间写一个通用的“删除所有约束”脚本,这样你就不必维护它了。

对以下语句的游标就可以了。

Select * From Information_Schema.Table_Constraints 

Select * From Information_Schema.Referential_Constraints

===============>>#5 票数:1

@亚当

或者仅仅通过域 - 在同一个文件中对相关表进行有用的分组,但与其他表分开?

唯一的问题是,如果某些域(在这个有点遗留系统中)是紧密耦合的。 此外,您必须维护不同子脚本之间的依赖关系。

===============>>#6 票数:1

如果您正在寻找自动化工具,我经常使用EMS SQLManager,它允许您从数据库自动生成ddl脚本。

在将数据库联机之前,可能必须在参考表中插入数据。 这甚至可以被视为ddl脚本的一部分。 EMS还可以为现有数据库中的数据插入生成脚本。

在ddl阶段可能无法正确估计对索引的需求。 您只需要为主键/外键声明它们。 一旦定义了视图和查询,就应该在以后创建其他索引

===============>>#7 票数:0

我以前组织了我的DDL代码,每个实体由一个文件组织,并制作了一个工具,将其组合成一个DDL脚本。

我的前雇主使用了一个方案,其中所有表DDL都在一个文件中(以oracle语法存储),在另一个文件中有标记,在第三个中有约束,在第四个中有静态数据。 更改脚本与此保持并行(再次在Oracle中)。 转换为SQL是手动的。 这是一团糟。 我实际上写了一个方便的工具,它将Oracle DDL转换为SQL Server(它在99.9%的时间内工作)。

我最近转而使用Visual Studio Team System for Database专业人员 到目前为止,它工作正常,但如果您在数据库中使用CLR函数,则会出现一些问题。

  ask by Justin Standard translate from so

未解决问题?本站智能推荐:

1回复

是否可以将变量传递给SQL / DDL脚本?

我们有一堆脚本来重新建立我们的数据库。 我们运行的脚本调用了许多其他脚本: set_target_schema.sql看起来像: 有没有办法将可选参数传递给我们的顶级脚本,然后将该参数传递给set_target_schema.sql并使用该值作为模式的名称(如果已提供),否则使
1回复

SQL SERVER 2008-无法在ddl模式中获取少数对象的对象定义?

我正在使用MS SQL SERVER 2008数据库,其中我创建all objects如procedure , functions , views等。现在创建一个示例程序获取所有对象definition(ddl) ,在这里我发现一些objects definition为null我在sql que
3回复

从SQL Server数据库生成DDL脚本

如何使用SQL(select / stored procedure / etc)从SQL Server数据库生成所有表的DDL(带外键,索引等)脚本? 除了数据,我需要一切。 我不能使用Sql Server Management Studio,因为我想在一个将在linux上运行的node
2回复

SQL Server DDL脚本为数据库中的每个表追加(或删除)相同的列集?

如何编写一个sql server DDL脚本,它可以: 对于数据库中的每个表: 此外,如果表中已存在特定列,则只需跳过该列。 另外,对于每个表,它的反向放下这4列。
1回复

将MSSQL DDL转换为MySQL DDL

这个问题与 将MySQL DDL转换为SQL Server DDL 完全相反 。 我有一个SQL Server 2008 DDL文件。 我想将其导入MySQL。 有什么工具或建议可以实现这一目标吗?
1回复

SQL DDL支持迁移和更新

我有一个Web应用程序,它仅使用基本的ms-sql DB表和约束,没有什么特别的。 每次我需要升级数据库的架构时,我都会删除旧的数据库,然后使用带有大量create table子句的标准DDL脚本重新创建新的数据库。 是否有任何模式可以使我编写DDL脚本,即使它在现有数据库上运行时也
2回复

数据定义语言(DDL)查询SQL

我是查询和SQL Server的新手,我想了解DDL。 我的表格中有一个属性,该属性具有多个值,例如Size = {'S','M','L'}。 如何使用查询在表中创建属性,以便将多个值插入到属性之一?
2回复

SQL Server DDL更改(列名,类型)

我需要审核对数据库所做的DDL更改。 这些更改需要在以后的其他许多数据库中复制。 我在这里发现,可以启用DDL触发器来跟踪DDL活动,这对于create table和drop table操作非常有用,因为该触发器获取已执行的T-SQL,并且我可以很高兴地将其存储在某个地方并简单地执行稍后在其
1回复

Delete如何既是DDL又是DML语句

我目前正在阅读微软的官方书籍“数据库管理基础”,以准备参加考试。 我理解DDL和DML是什么,但Microsoft将DELETE显示为DDL和DML语句。 我用谷歌搜索了这个,但我不能确认或否认这一点。 对此的一个很好的参考是: 什么是DDL和DML,它将其显示为DML。 以下是
1回复

创建表DDL时如何添加特殊约束

我想在下表中对我的值设置一些特殊的约束: 编辑: 该平台是Microsoft SQL Server。