SQL Server 2014 - 列出存储过程中使用的所有函数和子函数

SQL Server 2014 - List all functions and sub-functions used in the stored procedure

我正在尝试从我的应用程序中查找存储过程并查找函数和子函数以及用于在 SQL Server 2014 中重新设计应用程序的视图。我正在尝试的是花费大量时间,我想要在 SQL 查询的帮助下查找,如下所示:

 SELECT 
     OBJECT_NAME(object_id), 
     OBJECT_DEFINITION(object_id)
 FROM 
     sys.procedures
 WHERE 
     OBJECT_DEFINITION(object_id) LIKE '%fn%'

这是在检索所有使用函数的存储过程。我的要求如下:

  1. SQL 查询以查找特定存储过程中使用的函数和子函数。
  2. 查找函数或存储过程中使用的所有视图。

我的命名约定如下:

  1. P_* 用于存储过程
  2. FN_* 函数
  3. VW_* 浏览量

我的应用程序很大,因此手动查找存储过程很容易,但查找函数和视图确实需要时间。

您可以使用 sp_depends 获取特定存储过程的依赖对象列表(包括函数),使用 T-SQL。


在 SSMS 中,您可以在对象资源管理器中右键单击特定的存储过程,然后在上下文菜单中选择“查看依赖项”项:

这将打开一个 window 与依赖对象的树,包括函数:

您可以使用 sp_depends 来 return 所有对象都取决于特定的 sp。语法:sp_depends "your procedure name".

如果你只想要特定类型的对象(例如:views only)取决于stored procedure,那么你可以尝试如下,

SELECT ReferencingObjectType = o1.type,
       ReferencingObject = SCHEMA_NAME(o1.schema_id)+'.'+o1.name,
       ReferencedObject = SCHEMA_NAME(o2.schema_id)+'.'+ed.referenced_entity_name,
       ReferencedObjectType = o2.type
FROM   AdventureWorks2008.sys.sql_expression_dependencies ed
       INNER JOIN  AdventureWorks2008.sys.objects o1
         ON ed.referencing_id = o1.object_id
       INNER JOIN AdventureWorks2008.sys.objects o2
         ON ed.referenced_id = o2.object_id
WHERE o1.type in ('P','TR','V', 'TF', 'FN')
ORDER BY ReferencingObjectType, ReferencingObject

(注意:P - 存储过程,TR - 触发器,V - 视图,TF - Table 值函数,FN - 标量函数)