【问题标题】:Script all views/functions/procedures in a Sql Server database in dependency order按依赖顺序编写 Sql Server 数据库中的所有视图/函数/过程的脚本
【发布时间】:2011-07-29 07:19:06
【问题描述】:

Sql Server 2008(可能还有大多数其他版本):Management Studio 有一个“生成脚本”选项,理论上可以用所有对象(右键单击、任务、生成脚本)编写整个数据库的脚本。它在大多数情况下都可以正常工作,但是当您使用它为数据库中的所有视图/存储过程/函数编写脚本时,它会生成一个不考虑对象之间依赖关系的脚本。

例如如果视图 A 引用了函数 B,则不一定将函数 B 放在脚本中。

需要很长时间才能解开生成的长脚本,以使其按顺序运行而不会出错。

一定有更好的方法。解决这个问题的最佳方法是什么,最好不花钱?*

*(红门ftw)

【问题讨论】:

  • 只运行你的大脚本多次(直到它运行没有错误)
  • 我刚刚使用 SQL Server 2008 Management Studio 进行了尝试,它确实以正确的顺序创建了对象。 (为了简化事情,外键都是在最后创建的。)我从来没有遇到过这个问题。你的脚本有循环依赖还是什么?
  • @Jeffrey - 有时它似乎确实有效,但并不可靠。我的印象是,当对象发生很大变化时,sql 会丢失数据库中的依赖关系。

标签: sql-server sql-server-2008 ssms sql-scripts


【解决方案1】:

不幸的是,创建此类脚本的唯一快速简便的方法是使用一些第三方工具。我们使用的是Apex Script,但也有其他工具,Red Gate 可能有自己的版本。

其他选项有:

  • 多次运行脚本,直到全部执行完毕
  • 尝试使用 sys.dependancies 自己创建正确的顺序,这可能并不总是有效
  • 想出你自己的依赖算法,这有点矫枉过正......

在以前版本的 SQL Server 中,sys 依赖项视图中存在错误。我记得在 SQL 2008 即将发布时读过它。

我不记得所有细节,但这是关于在删除和重新创建对象时依赖项无法正常工作的问题。

【讨论】:

    【解决方案2】:

    这是一个穷人的方法:

    1. 根据以下条件创建查询 列出的 sys.sql_dependencies 自下而上。也就是列表基 首先是对象,然后是对象 那些依赖,等等。这将 给你顺序 为您的对象编写脚本。
    2. 使用 powershell 编写脚本 对象。

    【讨论】:

    • sys.sql_dependencies 100% 可靠吗?
    • 一点也不。记录在创建对象时放置在该系统视图中,并且不一定随着情况的发展而保持最新。例如:尝试创建一个表,创建一个引用该表的视图,然后删除并重新创建该表。在删除表之前和之后,请注意 sys.sql_dependencies 中记录的依赖关系。
    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2021-09-06
    相关资源
    最近更新 更多