获取嵌套存储过程依赖项

时间:2017-07-07 22:22:58

标签: sql tsql

我继承了许多内置嵌套存储过程的非常大的存储过程。我想创建一个存储过程,我可以运行它来向我展示特定存储过程的所有依赖项 - 列出其中的所有表和嵌套存储过程。

我正在使用以下代码,但这只给出了顶级依赖项,而不是嵌套存储过程中的任何内容

CREATE TABLE #TEMP_ROADMAP
(
    TBL_OBJECT_NAME VARCHAR(50),
    TBL_TYPE VARCHAR(20),
    TBL_PARENT VARCHAR(20),
    PROCNAME VARCHAR(50)
)

DECLARE @PARENTPROC VARCHAR(100)
SET @PARENTPROC = '[DBO].[RULE_PROC_1]' 

INSERT INTO #TEMP_ROADMAP (TBL_OBJECT_NAME,TBL_TYPE)
    SELECT DISTINCT
        [OBJECT_NAME] = SCHEMA_NAME(O.[SCHEMA_ID]) + '.' + O.NAME, O.TYPE_DESC
    FROM    
        SYS.DM_SQL_REFERENCED_ENTITIES (@PARENTPROC, 'OBJECT') D
    JOIN 
        SYS.OBJECTS O ON D.REFERENCED_ID = O.[OBJECT_ID]
    WHERE 
        O.[TYPE] IN ('U', 'V', 'P', 'IF', 'FN')

   UPDATE #TEMP_ROADMAP
   SET TBL_PARENT = 'PARENT',
       PROCNAME = @PARENTPROC
   WHERE TBL_OBJECT_NAME IS NOT NULL

   SELECT * FROM #TEMP_ROADMAP

   DROP TABLE #TEMP_ROADMAP

输出:

TBL_OBJECT_NAME  TBL_TYPE               TBL_PARENT       PROCNAME
dbo.RULE_PROC_2  SQL_STORED_PROCEDURE   PARENT           [DBO].[RULE_PROC_1]
dbo.TEST_TABLE_1 USER_TABLE             PARENT           [DBO].[RULE_PROC_1]

我可以在这个父程序中获取其他嵌套存储过程的表和名称吗?

1 个答案:

答案 0 :(得分:0)

很抱歉,如果我误解你,但我认为你需要这个: -

foreach ($form["team"]->getData() as $value) {
   'name' => $value['name']