Sql 如何从单个存储过程中查找所有存储过程和表?

Sql 如何从单个存储过程中查找所有存储过程和表?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我正在开发一个数据库,它有很多存储过程和表 了解单个存储过程调用的所有存储过程和表的一种蛮力方法是扫描和读取代码。然而,这需要很多时间 查找主存储过程调用的所有存储过程和表的查询是什么?您可以这样查询存储过程和表: SELECT sys.objects.name, sys.objects.type_desc FROM sys.sql_expression_dependencies INNER JOIN sys.objects ON(referenced_id = object_id) WHER

我正在开发一个数据库,它有很多存储过程和表

了解单个存储过程调用的所有存储过程和表的一种蛮力方法是扫描和读取代码。然而,这需要很多时间

查找主存储过程调用的所有存储过程和表的查询是什么?

您可以这样查询存储过程和表:

SELECT sys.objects.name, sys.objects.type_desc
FROM sys.sql_expression_dependencies 
INNER JOIN sys.objects ON(referenced_id = object_id)
WHERE referencing_id = OBJECT_ID('<Your stored procedure name here>')
DECLARE @StoredProcedureName sysname = '<Your stored procedure name here>'

SELECT sys.objects.name, sys.objects.type_desc
FROM sys.sql_expression_dependencies 
INNER JOIN sys.objects ON(referenced_id = object_id)
WHERE referencing_id = OBJECT_ID(@StoredProcedureName)

UNION ALL

SELECT procedures.name , 'Stored Procedure' As type_desc
FROM sys.sql_expression_dependencies 
INNER JOIN sys.procedures ON(referenced_entity_name = sys.procedures.name)
WHERE referencing_id = OBJECT_ID(@StoredProcedureName)
AND referenced_id IS NULL 

感谢您的查询,我在使用此解决方案的存储过程中找到了所有调用的表,包括联接表。但是,它没有检测到由main调用的“exec部分”。是否有一种方法可以包含名为的存储过程?通过示例使问题更清楚。假设存储过程1(SP)调用SP2和表2,SP2调用SP3和表3。我可以运行一个包含SP1的查询来列出SP2、表2、SP3和表3吗?