gpt4 book ai didi

sql-server - 查找存储过程列表的所有依赖项

转载 作者:行者123 更新时间:2023-12-04 01:30:43 33 4
gpt4 key购买 nike

我们有一个在我们的应用程序中使用的 51 个存储过程的列表。

我需要找出那些存储过程调用的所有函数和存储过程的名称

有没有一种快速的方法可以找出我们的存储过程正在调用什么?

我尝试使用 sys.dm_sql_referencing_entities 如下

SELECT 
referencing_schema_name +'.'+ referencing_entity_name AS ReferencedEntityName,
referencing_class_desc AS ReferencingEntityDescription
FROM sys.dm_sql_referencing_entities ('dbo.sp_GetPayRunDetails', 'OBJECT');
GO

但我希望有一种方法可以检查所有 50 个存储过程并获取有关它们调用的其他对象(存储过程和函数)的详细信息...

我不想手动执行此操作是因为我还需要调用...的存储过程和函数的递归依赖关系

最佳答案

此查询可能会为您解决问题:

WITH cteDependencies AS (
SELECT e.referencing_id object_id, e.referencing_id, e.referenced_id, e.referenced_schema_name, e.referenced_entity_name
FROM sys.sql_expression_dependencies e
WHERE e.referencing_id = OBJECT_ID('dbo.sp_GetPayRunDetails')
UNION ALL
SELECT d.object_id, e.referencing_id, e.referenced_id, e.referenced_schema_name, e.referenced_entity_name
FROM sys.sql_expression_dependencies e
JOIN cteDependencies d ON d.referenced_id = e.referencing_id AND e.referenced_id <> e.referencing_id
)
SELECT OBJECT_NAME(d.object_id) source_name, d.*
FROM cteDependencies d
JOIN sys.all_objects o ON d.referenced_id = o.object_id
WHERE o.[type] IN ('P','FN','TF'); -- for a list of types see https://msdn.microsoft.com/en-us/library/ms178618.aspx?f=255&MSPPError=-2147217396

请注意,它会在循环引用上失败;如果你有这样的,你需要跟踪依赖路径(例如在 XML 列中)并跳过重复的项目。

您可以通过更改 OBJECT_ID('dbo.sp_GetPayRunDetails') 过滤器来更改“来源”以包含您要分析的 SP。

关于sql-server - 查找存储过程列表的所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127242/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com