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

时间:2017-07-06 08:51:22

标签: sql

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

查询附于此处:

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 个答案:

答案 0 :(得分: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'

另外 要在数据库中使用

获取整个表列表
SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES

并获取所有程序名称使用

SELECT SPECIFIC_NAME
    FROM INFORMATION_SCHEMA.ROUTINES