如何使用T-SQL获取SQL服务器中最依赖的存储过程?

How to get the most dependent stored procedure in SQL Server using T-SQL?

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

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

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

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

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

您可以通过以下流程找到它们。我只用 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