【问题标题】:SQL Server 2014 - List all functions and sub-functions used in the stored procedureSQL Server 2014 - 列出存储过程中使用的所有函数和子函数
【发布时间】:2016-04-06 04:47:48
【问题描述】:

我正在尝试从我的应用程序中查找存储过程并查找函数和子函数以及用于在 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 "你的过程名"。它将返回所有对象取决于特定的 sp
  • 我没试过sp_depends

标签: sql sql-server sql-server-2014 database-administration


【解决方案1】:

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


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

这将打开一个包含依赖对象树的窗口,包括函数:

【讨论】:

    【解决方案2】:

    您可以使用sp_depends 返回所有依赖于特定 sp 的对象。语法:sp_depends "your procedure name".

    如果您只想要特定类型的对象(例如:仅views)依赖于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 - 表值函数,FN - 标量函数)

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 2015-06-14
      • 2016-02-25
      相关资源
      最近更新 更多