【问题标题】:How to get the most dependent stored procedure in SQL Server using T-SQL?如何使用 T-SQL 获取 SQL Server 中最依赖的存储过程?
【发布时间】:2018-06-18 14:53:55
【问题描述】:

我正在尝试在 SQL Server Management Studio 2014 中获取最依赖的存储过程。我有一个庞大的数据库,其中包含近 1900 个存储过程、453 个表、768 个视图和 419 个函数。一些存储过程非常大(4089 行),其中嵌套了许多存储过程、视图和函数。我想重新设计架构和软件本身。

我想获取依赖对象名称最依赖的存储过程的报告。

我已经搜索过了,但没有找到合适的解决方案。

【问题讨论】:

    标签: sql-server stored-procedures sql-server-2014 sqldependency


    【解决方案1】:

    您可以使用sys.sql_expression_dependencies 系统视图。

    但是,如果您确实要了解代码模块层次结构的结构,您肯定需要某种可视化工具来将依赖关系图显示为图表。不过,还没有听说过市场上有任何东西可以满足您的需求。

    【讨论】:

      【解决方案2】:

      您可以通过以下过程找到它们。我只用 149 个存储过程测试了我们的数据库,并花了 1 分钟的时间来获取。

      这里我将存储过程名称传递给 object_DEFINITION 函数,以了解在哪个过程定义中使用了该名称。

          DECLARE @TAB_SP TABLE(ID INT IDENTITY, OBJECTID int, NAME VARCHAR(250))
          DECLARE @TAB_SP_DEPENDENCY TABLE (ID INT IDENTITY, NAME VARCHAR(250), SP_COUNT INT)
      
          INSERT INTO @TAB_SP
          select object_id,NAME from sys.objects WHERE type='P'
      
          DECLARE @MIN INT =1, @MAX INT = (SELECT MAX(ID) FROM @TAB_SP), @SP_NAME VARCHAR(250)
      
          WHILE (@MIN<=@MAX)
          BEGIN
      
                  SELECT @SP_NAME=NAME  FROM @TAB_SP WHERE ID= @MIN
      
                  INSERT INTO @TAB_SP_DEPENDENCY
                  SELECT @SP_NAME,COUNT(DISTINCT object_id) FROM SYS.OBJECTS 
                  WHERE OBJECT_DEFINITION(object_id) LIKE '%'+@SP_NAME+'%'
      
                  SET @MIN=@MIN+1
          END
      
          SELECT * FROM @TAB_SP_DEPENDENCY
      

      【讨论】:

      • 这导致两行不是 sp 和函数的列表。以下是结果 object_id 和 NAME 值是 {1803153469, sp_MSrepl_startup}{1819153526, sp_MScleanupmergepublisher}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多