2013-03-14 97 views
23

我正在查找一个SQL查询,它输出数据库目录中所有用户定义函数的函数定义。数据库中所有用户定义函数的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过程或专门的帮助程序更容易,我会做到这一点,并发布它。

+1

的可能重复(http://stackoverflow.com/questions/54482/how-do-i-list-user-defined-types-in-a-sql-server-database) – Kermit 2013-03-14 21:09:04

+4

@AarolamaBluenk这根本不是这个问题的重复。这是寻找udf的和他们的定义,而不是udt的... – rsbarro 2013-03-14 21:15:23

回答

37
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%' 
+0

这个答案更好地允许如果需要更容易包含其他列的信息。杰夫的CTE也符合这个法案,我认为CTE是一个我希望在其他情况下知道的有用技术。从RandomUs1r知道sys.sql_modules及其object_id键引用,IN(SELECT SUBQUERY)最适合我的用途。 – stackuser83 2013-03-15 13:45:23

4

你可以使用一个CTE:我如何列出一个SQL Server数据库用户定义类型]

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 
1
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') 
+0

解释代码 – tinamou 2017-06-06 15:33:40

+1

嗨tinamou, 在这里,我们正在获取函数的名称,定义和用户定义函数的类型。 用户定义函数可以是内联函数(IF)或标量函数(FN)或表值函数(TF)。 – 2017-06-07 09:26:08

相关问题