存储过程中使用的所有数据库中的表的列表
问题描述:
我们创建了存储过程,其中包含来自同一服务器中不同数据库的大量表。现在我需要列出所有对应特定存储过程的表。 我已经尝试了以下查询,但它只显示与特定数据库相关的表格。存储过程中使用的所有数据库中的表的列表
查询接在这里:
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
答
这个查询将给在“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
你到目前为止试过了什么? – vaso123
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
标签DBMS的你”重新使用。 (使用了一些产品细节。) – jarlh