SQL Server - "sys.functions"在哪里?

mar*_*c_s 101 sql sql-server sql-server-2005 stored-functions

SQL Server 2005在我经常使用的系统目录上有很棒的sys.XXX视图.

让我失望的是:为什么有一个"sys.procedures"视图来查看有关存储过程的信息,但是没有"sys.functions"视图来查看存储函数的相同信息?

没有人使用存储的功能吗?我发现它们对于例如计算列等非常方便!

是否有一个特定的原因缺少sys.functions,或者它只是被认为不足以放入sys目录视图的东西?它在SQL Server 2008中可用吗?

干杯,马克

Luk*_*keH 112

我发现UDF非常方便,我一直都在使用它们.

我不确定微软的理由是什么不包括SQL Server 2005(或SQL Server 2008中的sys.functions等价物,据我所知),但它很容易推出自己的:

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

  • 这还应包括CLR功能类型:'AF','FS'和'FT'.请参阅sys.objects"type"列说明:http://msdn.microsoft.com/en-us/library/ms190324.aspx (7认同)
  • 就SQL Server的对象元数据而言,"AF"不被视为"功能",即使它代表AGGREGATE_FUNCTION.更清楚的是,当考虑使用CREATE AGGREGATE而不是CREATE FUNCTION创建新聚合时,Aggregate是与其他用户定义函数不同的对象类型.对象类型'FN','IF','TF','FS'和'FT'是SSMS(通过SMO)在编写IF EXISTS ... DROP FUNCTION代码时生成的五种函数类型. (4认同)

Tim*_*m C 37

列出函数的另一种方法是使用INFORMATION_SCHEMA视图.

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'
Run Code Online (Sandbox Code Playgroud)

根据Microsoft网站"信息架构视图提供SQL Server元数据的内部系统表独立视图.信息架构视图使应用程序能够正常工作,尽管已对基础系统表进行了重大更改".换句话说,底层的System表可能会随着SQL升级而改变,但视图仍应保持不变.

  • INFORMATION_SCHEMA会很棒,但它不包括更大的程序 - 如果你在体内搜索它会使它变得毫无价值.这不是你不知道会让你陷入困境的,但是你知道的不是那么...... (4认同)
  • Information_Schema视图明确记录为某些内容不可靠.例如"不要使用INFORMATION_SCHEMA视图来确定对象的模式.查找对象模式的唯一可靠方法是查询sys.objects目录视图."来自http://msdn.microsoft.com/en-我们/库/ ms188757.aspx (3认同)

Orl*_*teo 18

根据SSMS在编写函数的DROP脚本时生成的内容,这在2008 R2中有效:

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
*/
Run Code Online (Sandbox Code Playgroud)


小智 5

它略显冗长,但这应该完全相同:

select * from sys.objects where (type='TF' or type='FN')
Run Code Online (Sandbox Code Playgroud)

据我所知,它也不在SQL Server 2008中.