【问题标题】:SQL Server DependenciesSQL Server 依赖项
【发布时间】:2010-09-22 21:12:41
【问题描述】:

在 SQL Server 2005+ 中是否有一种简单的方法来追踪表/存储过程/函数的依赖关系?我继承了一个巨大的应用程序,其中包含大量的表,甚至更多的存储过程和函数,它们很长且相互关联。

到底有没有办法建立一个依赖树?理想情况下,我正在寻找两个方向:

对于表/过程 - 它依赖于什么?:显示最终引用它的所有存储过程(理想情况下在树视图中,这样子过程嵌套到调用的更大过程中)他们)

对于一个过程 - IT 依赖什么?:显示给定过程在运行时将(或可能)触及的所有过程和表格。

似乎这个工具不应该那么难制作,并且对于一般的数据库维护非常有用。有人知道这样的事情吗?如果这不存在,为什么不呢?

Management Studio 的内置功能不错,但信息似乎并不完整。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    我不认为这是一个保证完整的列表,但在 Management Studio 中,您可以右键单击表或存储过程并选择 View Dependencies 选项。

    【讨论】:

      【解决方案2】:

      Red Gate 有一个非常有用的工具,叫做SQL Dependency Tracker。我们已经成功地将它用于您希望获得的结果类型。

      【讨论】:

      • 终于开始使用免费试用版 - 这是一个很棒的工具。
      【解决方案3】:

      试图跟踪依赖关系的系统表通常是错误的,所以你从中得到的任何答案都必须通过其他方式重新确认,所以为什么要麻烦呢?

      存在商业产品,例如 Redgate SQL Dependency Tracker。

      像我这样可怜的开发人员,我使用免费的 SQL Digger。通过在 DDL 中搜索对象名称,您通常可以找到相关对象的一级依赖关系。

      下一级依赖跟踪是跟踪 C# 或 VB.NET 网络对象依赖于 SQL 中的对象,但 AFAIK,在全局搜索之外不存在用于该对象的工具。

      【讨论】:

        【解决方案4】:

        如果您的预算不足,这里有一个选项列表:

        http://www.mssqltips.com/tip.asp?tip=1294

        当您单击“查看依赖项”时,您还可以运行跟踪并查看管理工作室实际在做什么。获取该代码,看看您是否可以修改它以供自己使用。这是一种很好的技术,可以帮助您了解如何自动化您通常通过 UI 执行的各种操作。

        【讨论】:

        • 使用分析器你应该能够看到哪些代码在服务器上运行。
        【解决方案5】:

        希望我不会太晚:

        如果您的 SQL 登录可以访问特定数据库中的 sys 架构,您可以使用 sys.dependencies 视图一次性查找对象的所有依赖项:

        SELECT o.name, o.type_desc, p.name, p.type_desc
        FROM sys.sql_dependencies d
        INNER JOIN sys.objects o
            ON d.object_id = o.object_id
        INNER JOIN sys.objects p
            ON d.referenced_major_id = p.object_id
        

        以此为起点,您或许可以构建一个体面的工具来创建依赖关系树。还有一些特定类型的视图(例如 sys.columns),可以提供有关每个特定数据库对象类型的更深入信息;如有必要,这些可用于提供有关对象的上下文信息。

        【讨论】:

        • 我相信sys.objects 表所属的对象目录视图是在 SQL 2005 中引入的,但是可以使用信息模式视图编写类似的查询。它们有点棘手,但您可以在 msdn.microsoft.com/en-us/library/aa933204(SQL.80).aspx 找到有关它们的文档
        • 您可以将其保存到 Excel 并使用 Gephi(一个免费且非常先进的图形可视化工具)导入
        • BTW sql_dependencies 现在已弃用,所以最好使用 sys.sql_expression_dependencies
        【解决方案6】:

        试试这个生产力工具http://sqlhopper.weebly.com/ 很酷

        【讨论】:

          【解决方案7】:

          我找到了这个解决方案,而且非常棒。

          SELECT referencing_schema_name, referencing_entity_name,
          referencing_id, referencing_class_desc, is_caller_dependent
          FROM sys.dm_sql_referencing_entities ('dbo.udf_func', 'OBJECT');
          

          【讨论】:

            【解决方案8】:

            来自MSDN

            SELECT * FROM sys.sql_expression_dependencies
            WHERE referenced_id = OBJECT_ID(N'Production.Product');
            

            我们可以让它更漂亮:

            select
            I.name depending, I.xtype dependingtype,
            E.name depended, E.xtype dependedtype
            from sys.sql_expression_dependencies D
            left outer join sysobjects I on D.referencing_id = I.id
            left outer join sysobjects E on D.referenced_id = E.id
            where 1 = 1
            and ( E.name = 'mytable' or I.name = 'mytable' )  -- customize this any way you want
            order by dependedtype, depended, dependingtype, depending
            

            【讨论】:

              猜你喜欢
              • 2013-11-26
              • 2011-10-20
              • 1970-01-01
              • 1970-01-01
              • 2011-02-03
              • 2012-10-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多