查找引用某个过程/函数的所有函数/存储过程?

Mat*_*ete 9 sql-server sql-server-2012

我的任务是将报告从 SSRS 移动到我们内部的 ASP.Net 应用程序,这涉及我重新编写一些函数和一个存储过程,以提高性能,使它们以应用程序更好地使用的形式输出,并使任何要求的对报告的补充。

我还需要做的是在执行此操作之前从系统中删除旧的功能和过程,尽管我想确保它不会破坏其他任何东西。有没有一种方法可以让我通过所有的程序和函数来查看它们中是否有任何包含对我将要删除的程序的引用?

虽然有成千上万的这些,但我宁愿不必在 SSMS 中一次打开每一个来查看。因此,如果有一些我可以查询的表,或者即使有一个 SQL Server 隐藏的 .sql 文件我可以挖掘,那就太好了。

Mar*_*son 14

sys.sql_expression_dependencies 如果您不想搜索每个对象的定义(特别是当引用可能有也可能没有模式前缀时),应该给您想要的东西。

我认为您可以通过以下查询获得所需内容:

SELECT 
    o.name AS ReferencingObject, 
    sd.referenced_entity_name AS ReferencedObject
FROM sys.sql_expression_dependencies  AS sd
INNER JOIN sys.objects AS o
    ON o.object_id = sd.referencing_id
WHERE sd.referenced_entity_name = 'my_object_name';
Run Code Online (Sandbox Code Playgroud)

  • 蛮力解析的另一个问题是误报(例如,模块名称在注释、字符串文字或另一个对象名称的一部分中)。但是这两种方法都容易出现误报(例如,对模块的调用是用动态 SQL 构造的)。 (2认同)