我正在开发一个包含大量存储过程和表的数据库。
了解单个存储过程调用的所有存储过程和表的一种强制方法是扫描并读取代码。但是,这需要很多时间。
查询主存储过程调用的所有存储过程和表的查询是什么?
答案 0 :(得分:2)
您可以像这样查询sys.objects和sys.sql_expression_dependencies表:
<Your stored procedure name here>
不要忘记将sys.sql_expression_dependencies
替换为存储过程的实际名称。
<强>更新强>
从另一个存储过程调用的存储过程仍将在referenced_id
中有一行,但在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
列中将具有空值。你可以使用这样的东西:
$rootScope = data;