科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何使用SQL CLR表值函数进行扩展(2)

如何使用SQL CLR表值函数进行扩展(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Microsoft SQL Server 2005 的一项新增功能是其与 Microsoft .NET Framework 公共语言运行库 (CLR) 的集成。这使得人们能够将 .NET Framework 类和函数纳入 Transact-SQL 语句和查询。

作者:microsoft.com 来源:microsoft.com 2007年8月30日

关键字: CLR SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件

其他元数据在 SqlFunction 属性的参数中定义。在前一示例中,列名和类型以及返回表的名称都是在此属性中定义的。

将此函数部署到某 SQL Server 实例后,就可以运行以下查询来查看应用程序日志中的最后 10 项。

SELECT TOP 10 T.logTime, T.Message, T.InstanceId
FROM dbo.ReadEventLog(N'Application') as T

结果如图 1 所示:

如何使用SQL CLR表值函数进行扩展(2)

图 1. 查询结果

将表值函数用作数据处理扩展的替代方法

Reporting Services 数据处理扩展功能可用于通过实现一组 ADO.NET 接口来对数据源建模。这在概念上类似于如何才能将表值函数用于 Reporting Services。表值函数明显优于数据处理扩展。

优点:

首先,表值函数比数据处理扩展要容易实现的多。只需创建两种方法即可实现表值函数。而数据处理扩展则必须实现许多接口。同样,部署模型也更简单明了。Microsoft Visual Studio 2005 可自动将 .NET Framework 表值函数部署到 SQL Server,之后,该函数即立即变得可从 Reporting Services 中使用。为了部署某数据处理扩展,必须将程序集复制到客户端和报表服务器,并在这两处编辑 XML 配置文件。

表值函数的另一个重要优点在于它可以是与之连接的数据库中某一联接的组成部分。这意味着 SQL Server 中的关系数据在被放入报表之前,可以与该函数中定义的自定义数据混合在一起并筛选出来。这对于数据处理扩展则是不可能的,因为 Reporting Services 不支持数据源之间的联接查询。

缺点:

数据处理扩展较之表值函数要强大和灵活得多。表值函数只能对单个数据库表建模,而数据处理扩展可以对整个数据库的等效项建模。同样,数据处理扩展可以充当完全自定义的数据源,而且它可以有自己的查询语言和连接语法。对于不同类型的数据,使用 SQL 作为查询语言并非总是理想的选择。例如,Reporting Services 包括 XML 数据的数据处理扩展,它使用类似于 Xpath 的查询语言。当开发人员希望完全控制数据访问代码路径时,数据扩展很有用。

将表值函数与 SQL Server Reporting Services 一起使用

您必须先完成三件事,然后才能将表值函数用于 Reporting Services。首先,必须配置 SQL Server,使之允许 CLR 集成。其次,必须在 Visual Studio 中开发表值函数。最后,必须将该函数部署到某 SQL Server 实例中。

要让 SQL Server 允许 CLR 集成,必须使用 SQL Server 外围应用配置器工具或运行查询来设置一个标志。

配置 SQL Server,使之允许 CLR 集成:

1.单击“开始”按钮,依次指向“所有程序”、Microsoft SQL Server 2005 和“配置工具”,然后单击“外围应用配置器”。

2.在 SQL Server 2005 外围应用配置器工具中,单击“功能的外围应用配置器”。

3.选择您的服务器实例,展开“数据库引擎”选项,然后单击“CLR 集成”。

4.选择“启用 CLR 集成”。

此外,您可以在 SQL Server 中运行以下查询(此查询需要 ALTER SETTINGS 权限):

USE master
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

开发表值函数:

若要开发表值函数,请在 Visual Studio 中创建一个新的 SQL Server 项目。若要创建 SQL Server 项目,请打开“新建项目”对话框,展开 Visual C#,然后选择“数据库”。此时,系统会提示您输入数据库连接信息。有关详细信息,请参阅 SQL Server 2005 联机丛书中的如何:创建 SQL Server 项目。在您建立了数据库连接后,就可以编写表值函数了。在项目中创建一个空白 .cs 文件,文件名为 EventLog.cs,然后将示例函数从前一部分复制并粘贴到该文件中。

部署表值函数:

若要部署,您必须向 SQL Server 实例注册该函数和包含它的程序集。这一操作可通过 Transact-SQL 命令完成。以下脚本会注册 tvfEventLogs 程序集和 ReadEventLog 函数:

CREATE ASSEMBLY tvfEventLog
   FROM'D:\assemblies\tvfEventLog\tvfeventlog.dll'
   WITH PERMISSION_SET = SAFE
   GO
CREATE FUNCTION ReadEventLog(@logname nvarchar(100))
   RETURNS TABLE (logTime datetime,Message nvarchar(4000),
      Category nvarchar(4000),InstanceId bigint)
   AS EXTERNAL NAME tvfEventLog.TabularEventLog.InitMethod GO

此外,您还可以在解决方案资源管理器中右键单击相应的项目,并选择“部署”选项,直接从 Visual Studio 中部署您的程序集。Visual Studio 会使用 SqlFunction 属性来自动确定函数签名和其他必需的元数据。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章