如何使用SQL CLR表值函数进行扩展
2007-12-27 15:30:25 来源:WEB开发网该表值函数是作为 TabularEventLog 类的两个静态方法实现的。第一个方法 (InitMethod) 赋予 SqlFunction 属性,用于将它指定为该表值函数的入口点。此方法必须返回 IEnumerable 或 IEnumerator 对象。该对象包含将用于填充返回表的数据。执行该函数时,SQL Server 将循环访问 IEnumerator 对象中的每个对象,并使用它来填充数据行。为此,它要将该对象传递到该类中的第二个方法 FillRow。此方法会将该对象转换成返回表中的某一行。此方法在 SqlFunction 属性的 FillRowMethodName 参数中指定。
其他元数据在 SqlFunction 属性的参数中定义。在前一示例中,列名和类型以及返回表的名称都是在此属性中定义的。
将此函数部署到某 SQL Server 实例后,就可以运行以下查询来查看应用程序日志中的最后 10 项。
SELECT TOP 10 T.logTime, T.Message, T.InstanceId
FROM dbo.ReadEventLog(N'Application') as T
结果如图 1 所示:
图 1. 查询结果
将表值函数用作数据处理扩展的替代方法
Reporting Services 数据处理扩展功能可用于通过实现一组 ADO.NET 接口来对数据源建模。这在概念上类似于如何才能将表值函数用于 Reporting Services。表值函数明显优于数据处理扩展。
优点:
首先,表值函数比数据处理扩展要容易实现的多。只需创建两种方法即可实现表值函数。而数据处理扩展则必须实现许多接口。同样,部署模型也更简单明了。Microsoft Visual Studio 2005 可自动将 .NET Framework 表值函数部署到 SQL Server,之后,该函数即立即变得可从 Reporting Services 中使用。为了部署某数据处理扩展,必须将程序集复制到客户端和报表服务器,并在这两处编辑 XML 配置文件。
赞助商链接