【问题标题】:SQL list of all the user defined functions in a database数据库中所有用户定义函数的 SQL 列表
【发布时间】:2013-03-14 21:08:06
【问题描述】:

我正在寻找一个 SQL 查询,它输出数据库目录中所有用户定义函数的函数定义。

我已经找到了

SELECT OBJECT_DEFINITION (OBJECT_ID(N'dbo.UserFunctionName')) AS [Object Definition]

SELECT ROUTINE_NAME FROM information_schema.routines WHERE routine_type = 'function'

但我想不出或找不到将 ROUTINE_NAME 列表提供给 OBJECT_ID 的方法。

这里的目的是数据库中用户定义函数定义的可搜索文本,用于数据库更改分析,如果像完整的 SQL 过程或有目的的帮助程序这样的东西更容易,我会这样做并发布。

【问题讨论】:

标签: sql-server sql-server-2008-r2


【解决方案1】:
SELECT name, definition, type_desc 
  FROM sys.sql_modules m 
INNER JOIN sys.objects o 
        ON m.object_id=o.object_id
WHERE type_desc like '%function%'

【讨论】:

  • 此答案更适合在需要时允许更轻松地包含其他信息列。 Geoff 的 CTE 也非常符合要求,我认为 CTE 是一种有用的技术,我希望我知道其他情况。从 RandomUs1r 了解 sys.sql_modules 及其 object_id 键引用,IN(SELECT SUBQUERY) 最适合我的目的。
【解决方案2】:

您可以使用 CTE:

with functions(routine_name) as 
  (SELECT ROUTINE_NAME FROM information_schema.routines WHERE routine_type = 'function')
select 
  OBJECT_DEFINITION(OBJECT_ID(routine_name)) AS [Object Definition] 
from 
  functions

【讨论】:

    【解决方案3】:
    SELECT O.name, M.definition, O.type_desc, O.type
    FROM sys.sql_modules M
    INNER JOIN sys.objects O ON M.object_id=O.object_id
    WHERE O.type IN ('IF','TF','FN')
    

    【讨论】:

    • 嗨 tinamou,在这里,我们正在获取函数的名称、定义和用户定义函数的类型。用户定义函数可以是内联函数(IF)或标量函数(FN)或表值函数(TF)。
    【解决方案4】:

    与此解决方案类似:Query to list all stored procedures

    SELECT * 
      FROM DIDS0100.INFORMATION_SCHEMA.ROUTINES
     WHERE ROUTINE_TYPE = 'FUNCTION' 
        AND LEFT(ROUTINE_NAME, 3) NOT IN ('fn_')
    

    【讨论】:

      【解决方案5】:

      这是一个包含模式的版本,其格式允许大量删除不需要的标量值函数:

      SELECT ('DROP FUNCTION [' + SCHEMA_NAME(o.schema_id) + '].[' + o.name + ']') AS ObjectName 
      FROM sys.sql_modules m INNER JOIN sys.objects o ON m.object_id = o.object_id 
      WHERE o.type_desc = 'SQL_SCALAR_FUNCTION' 
      ORDER BY ObjectName
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多