欢迎来到天天文库
浏览记录
ID:36385281
大小:156.50 KB
页数:15页
时间:2019-05-10
《SQLServer–使用CCLR开发用户自定义表值函数》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、SQLServer–使用C#CLR开发用户自定义表值函数MicrosoftSQLServer2005的一项新增功能是其与Microsoft.NETFramework公共语言运行库(CLR)的集成。这使得人们能够将.NETFramework类和函数纳入Transact-SQL语句和查询。CLR集成的机制有多种:•CLR用户定义函数(包括表值函数)。•CLR用户定义类型。•CLR存储过程。•CLR触发器。本白皮书说明如何使用CLR表值函数根据包括数据库在内的各种源创建报表数据,从而创建可靠的ReportingServices报表。扩展ReportingService
2、s使用.NETFramework扩展ReportingServices并集成CLR功能的方法有多种,其中包括以下方法:•传递扩展—传递报表来响应事件•呈现扩展—除ReportingServices支持的之外,还能以其他格式显示报表•安全扩展—提供您自己的身份验证和授权机制用于查看和管理报表•数据处理扩展—通过开发能够处理来自ReportingServices不支持的数据源的数据•自定义报表项—是自定义的服务器控件,可嵌入报表中,以提供除内置控件以外的其他功能本白皮书阐述如何实现表值函数来处理数据,使之成为使用数据处理扩展的替代方法。有关扩展ReportingSe
3、rvices的详细信息,请参阅SQLServer2005联机丛书中的ReportingServices扩展。使用表值函数表值函数用于通过编程方式在运行时创建表。它们创建的表可象任何其他数据库表一样用于Transact-SQL查询语句。在SQLServer2000中引入表值函数时,只能使用Transact-SQL创建它们。以下是在Transact-SQL中实现的表值函数的示例。CREATEfunctionEmployeeNames()returns@employeeNamestable(idint,namenvarchar(20),)asbeginINSERT@e
4、mployeeNamesvalues(1,'Ryan');INSERT@employeeNamesvalues(2,'John');INSERT@employeeNamesvalues(3,'Bob');returnend然后,就可以从select语句中引用该函数,就象它是表一样:SELECTnamefromEmployeeNames()whereid=1。查询返回以下值:name--------------------Ryan尽管这很有用,但还是受到Transact-SQL语言的限制,因为该语言主要应用于关系数据。如果您尝试离开其适用范围,那么Transact
5、-SQL会变得多少有点不太灵活。在SQLServer2005中,您现在可以使用自己喜欢的.NETFramework语言来创建表值函数,这就可能出现一些令人惊叹的事情。现在,程序员能够将他们所需的任何信息提取到关系数据库表中。例如,以下代码是在MicrosoftVisualC#中实现的SQLServer2005表值函数,它返回根据系统事件日志创建的表:usingSystem;usingSystem.Data.Sql;usingMicrosoft.SqlServer.Server;usingSystem.Collections;usingSystem.Data.Sq
6、lTypes;usingSystem.Diagnostics;publicclassTabularEventLog{[SqlFunction(TableDefinition="logTimedatetime,Message"+"nvarchar(4000),Categorynvarchar(4000),InstanceIdbigint",Name="ReadEventLog",FillRowMethodName="FillRow")]publicstaticIEnumerableInitMethod(Stringlogname){returnnewEventLo
7、g(logname,Environment.MachineName).Entries;}publicstaticvoidFillRow(Objectobj,outSqlDateTimetimeWritten,outSqlCharsmessage,outSqlCharscategory,outlonginstanceId){EventLogEntryeventLogEntry=(EventLogEntry)obj;timeWritten=newSqlDateTime(eventLogEntry.TimeWritten);message=newSqlChars(ev
8、entLogEntry.
此文档下载收益归作者所有