2017-07-06 52 views
0

我們創建了存儲過程,其中包含來自同一服務器中不同數據庫的大量表。現在我需要列出所有對應特定存儲過程的表。 我已經嘗試了以下查詢,但它只顯示與特定數據庫相關的表格。存儲過程中使用的所有數據庫中的表的列表

查詢接在這裏:

SELECT 
    t.TABLE_NAME, 
    s.ROUTINE_NAME, 
    s.SPECIFIC_SCHEMA 
FROM INFORMATION_SCHEMA.TABLES t 
INNER JOIN INFORMATION_SCHEMA.ROUTINES s 
    ON s.ROUTINE_NAME IN (SELECT 
    referencing_entity_name 
    FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT')) 
    AND s.ROUTINE_TYPE = 'PROCEDURE' 
WHERE t.TABLE_TYPE = 'BASE TABLE' 
AND s.ROUTINE_NAME LIKE '%Procedure name%' 
ORDER BY s.ROUTINE_NAME 
+1

你到目前爲止試過了什麼? – vaso123

+1

SELECT t.TABLE_NAME,s.ROUTINE_NAME,s.SPECIFIC_SCHEMA FROM INFORMATION_SCHEMA.TABLES噸 INNER JOIN INFORMATION_SCHEMA.ROUTINES小號 ON s.ROUTINE_NAME IN ( SELECT referencing_entity_name FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '' + TABLE_NAME , '對象') ) 和s.ROUTINE_TYPE = '過程' WHERE t.TABLE_TYPE = '基表' 和s.ROUTINE_NAME LIKE '%步驟名字%' ORDER BY s.ROUTINE_NAME – thamizharasu

+1

標籤DBMS的你」重新使用。 (使用了一些產品細節。) – jarlh

回答

0

這個查詢將給在「spName」存儲過程中使用表的列表。您還可以刪除此條件下,以獲取有關所有存儲過程的細節在DB

SELECT TBL.TABLE_NAME, SR.ROUTINE_NAME,SR.SPECIFIC_SCHEMA 
    FROM INFORMATION_SCHEMA.TABLES TBL 
    INNER JOIN INFORMATION_SCHEMA.ROUTINES SR 
    ON SR.ROUTINE_NAME IN 
    (
      SELECT referencing_entity_name 
      FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT') 
    ) 
    AND SR.ROUTINE_TYPE = 'PROCEDURE' 
    WHERE TBL.TABLE_TYPE = 'BASE TABLE' and SR.ROUTINE_NAME='spName' 

而且 要在DB獲得整個表格列表使用

SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.TABLES 

,並獲得所有的程序名稱使用

SELECT SPECIFIC_NAME 
    FROM INFORMATION_SCHEMA.ROUTINES 
+0

我已經試過這個,但它只顯示了屬於我們創建sp的數據庫的表,但是我包含了來自不同數據庫的表,它確實顯示了所有表 – thamizharasu

相關問題