2017-07-07 61 views
3

我已經繼承了嵌套存儲過程中的一些非常大的存儲過程。我想創建一個存儲過程,我可以運行它來顯示特定存儲過程的所有依賴關係 - 列出其中的所有表和嵌套存儲過程。獲取嵌套的存儲過程依賴

我使用下面的代碼,但這只是給我的最高級別的依賴,而不是從嵌套存儲過程的任何

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

這裏是一個非常不錯的文章,這將給你如何做到這一點,你可以操縱寫在查詢了很好的見解該文章取決於您的要求。 https://sqlsunday.com/2013/11/03/working-with-dependencies/ – CuriousKid

+0

哪個版本的SQL Server。對於較早的版本,sp_depends系統存儲過程與sysdepends表一樣不可靠,但是在後來的版本中(我認爲2008R2版本)都更可靠。 –

回答

0

很抱歉,如果我誤解你,但我認爲你需要這樣的: -

EXECUTE SP_DEPENDS <PROCNAME>