Sql server 数据库中所有用户定义函数的SQL列表

Sql server 数据库中所有用户定义函数的SQL列表,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我正在寻找一个SQL查询,它输出数据库目录中所有用户定义函数的函数定义 我已经找到了 SELECT OBJECT_DEFINITION (OBJECT_ID(N'dbo.UserFunctionName')) AS [Object Definition] 及 但我想不出或找不到一种方法将例程名称列表提供给对象ID 此处的目的是数据库中用户定义函数定义的可搜索文本,用于数据库更改分析,如果完整SQL过程或专用帮助程序更容易,我将这样做并发布。您可以使用CTE: with functions(ro

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

我已经找到了

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

但我想不出或找不到一种方法将例程名称列表提供给对象ID

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

您可以使用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

与此解决方案类似:


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

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

可能重复@AarolamaBluenk这根本不是该问题的重复。这是在寻找udf及其定义,而不是udt。如果需要,这个答案更便于包含其他信息列。Geoff的CTE也很符合这个要求,我认为CTE是一种有用的技术,我希望我在其他情况下也知道。从RandomUs1r了解sys.sql_模块及其object_id键引用后,IN(选择子查询)最适合我的目的。您好,这里,我们获取函数的名称、定义和用户定义函数的类型。用户定义的函数可以是内联函数(IF)、标量函数(FN)或表值函数(TF)。
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%'
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')
SELECT * 
  FROM DIDS0100.INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_TYPE = 'FUNCTION' 
    AND LEFT(ROUTINE_NAME, 3) NOT IN ('fn_')
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