SQL Server 2005中有关于这一点我经常使用的系统目录很大sys.XXX意见。

什么绊倒了我,这是:为什么有一个“sys.procedures”视图来查看有关您的存储过程的信息,但没有“sys.functions”视图查看方式是相同的存储功能

不使用任何存储函数?我觉得他们对例如非常方便计算列和这样!

有sys.functions缺少具体的原因,或者是它只是一些不被认为足够重要,所以到SYS目录视图?它是在SQL Server 2008提供??

干杯, 马克

有帮助吗?

解决方案

我觉得UDF是非常方便,我用他们所有的时间。

我不知道微软的理由是不包括sys.functions相当于在SQL Server 2005(或SQL Server 2008,据我可以告诉),但它很容易推出自己的:

CREATE VIEW my_sys_functions_equivalent
AS
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF')  -- scalar, inline table-valued, table-valued

其他提示

要列出函数另一种方法是利用INFORMATION_SCHEMA视图。

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'

据微软的网站“信息架构视图提供的SQL Server元。信息架构视图使应用程序虽然显著更改了底层系统表进行正常工作的内部系统表独立意见”。换句话说,下面的系统表可以如SQL改变被升级,但视图应该仍然保持相同。

这是在2008 R2每什么SSMS生成,当你的脚本功能的下降有效的:

SELECT  *
FROM    sys.objects
WHERE   type IN (N'FN', N'IF', N'TF', N'FS', N'FT') ;

/*
From http://msdn.microsoft.com/en-us/library/ms177596.aspx:
 FN SQL_SCALAR_FUNCTION
 FS Assembly (CLR) scalar-function
 FT Assembly (CLR) table-valued function
 IF SQL_INLINE_TABLE_VALUED_FUNCTION
 TF SQL_TABLE_VALUED_FUNCTION
*/

这是非常稍微详细,但这应该做同样的事情:

select * from sys.objects where (type='TF' or type='FN')

据我所看到的,它不是在SQL Server 2008中无论是。

这不添加任何新的,但我发现下面的更容易记住:

select * from sys.objects where type_desc like '%fun%'

尝试这样:

SELECT * FROM sys.objects
where type_desc = 'SQL_SCALAR_FUNCTION'

顺便说一下,将不想要包括类型= 'FS'?

name    type    type_desc
getNewsletterStats  FS  CLR_SCALAR_FUNCTION

这就是在sys.objects中的项对应于我的UDF,其从外部的DLL衍生

要在@ LukeH的回答延伸,返回功能定义,还需要加入到sys.sql_modules表。因此,对于这个查询是:

SELECT O.name as 'Function name', M.definition as 'Definition', O.object_id
FROM sys.objects as O INNER JOIN sys.sql_modules as M
    ON O.object_id = M.object_id
WHERE type IN ('FN', 'IF', 'TF')  -- scalar, inline table-valued, table-valued

,其中上述显示器的函数名,其定义分别与对象标识符

有关的标量函数更充分的描述,包括所有者和返回类型:

SELECT f.name, s.name AS owner, t.name as dataType, p.max_length, p.precision, p.scale, m.definition
FROM sys.objects f
JOIN sys.schemas s on s.schema_id = f.schema_id
JOIN sys.parameters p on p.object_id = f.object_id AND p.parameter_id = 0
JOIN sys.types t ON t.system_type_id = p.system_type_id 
JOIN sys.sql_modules as m ON m.object_id = f.object_id
WHERE type='FN';

SQL 2000具体而言,对于该对象名轻微调整:

SELECT *
FROM sysobjects
WHERE type IN ('FN', 'IF', 'TF')

OR

SELECT *
FROM dbo.sysobjects
WHERE type IN ('FN', 'IF', 'TF')
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top