我们已经创建了存储过程,其中包括来自同一服务器中不同数据库的大量表。现在我需要列出所有表对应的特定存储过程。 我尝试了以下查询,但它仅显示与特定数据库相关的表。
查询附于此处:
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
答案 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