存储过程中使用的所有数据库中的表的列表

问题描述:

我们创建了存储过程,其中包含来自同一服务器中不同数据库的大量表。现在我需要列出所有对应特定存储过程的表。 我已经尝试了以下查询,但它只显示与特定数据库相关的表格。存储过程中使用的所有数据库中的表的列表

查询接在这里:

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

这个查询将给在“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