首页 > 代码库 > SQL Server CLR 集成简介

SQL Server CLR 集成简介

         公共语言运行库 (CLR) 是 Microsoft .NET Framework 的核心,为所有 .NET Framework 代码提供执行环境。 在 CLR 中运行的代码称为托管代码。 CLR 提供执行程序所需的各种函数和服务,包括实时 (JIT) 编译、分配和管理内存、强制类型安全性、异常处理、线程管理和安全性。

通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数。 因为托管代码在执行之前会编译为本机代码,所以,在有些方案中可以大大提高性能。

托管代码使用代码访问安全性 (CAS)、代码链接和应用程序域来阻止程序集执行某些操作。 SQL Server 使用 CAS 来帮助保证托管代码的安全,并避免操作系统或数据库服务器受到威胁。

本节只是为了提供足够的信息,以便开始使用 SQL Server CLR 集成编程,而并非为了提供完整的信息。 有关更多详细信息,请参见您正在使用的 SQL Server 版本的“SQL Server 联机丛书”版本。

启用 CLR 集成

默认情况下,Microsoft SQL Server 中禁用公共语言运行库 (CLR) 集成功能,必须启用才能使用通过 CLR 集成实现的对象。 要使用 Transact-SQL 启用 CLR 集成,请使用如下所示的 sp_configure 存储过程的 clr enabled 选项:

sp_configure ‘clr enabled‘, 1
GO
RECONFIGURE
GO

可以通过将 clr enabled 选项设置为 0 来禁用 CLR 集成。在禁用 CLR 集成时,SQL Server 停止执行所有 CLR 例程并卸载所有应用程序域。


第一步 建立环境

   首先我们要打开Sql2005的IDE,新建 一个数据库,这个过程 就不多说了,数据库名称 是 Text

   下在我们打开VS2005 或是2008(选择.net2.0因为这里只支持2.0的CLR)新建项目

  

  在这里跟新建其它项目就有很大不同的,我们要选择一个Office下的数据库,选择SqlServer项目  名称为 SqlClrProject 位置您可以自己选择电脑上的任意位置就可以了,单击确定

在这里我们要选择一下自己的数据,如果你不是第一次的话那么会默认的列出所有选择过的数据库,而这里我的选择过了所以出现一个 已有的选择项,当然如果 你是第一次的话 是没有选择项目的,这时我们单击  添加新引用(A)... 

相信这里大家都 很熟悉了吧,选择一下我们刚刚建好的数据库吧,

然后单击确定

在这里我们单击是就可以了,因为我们得启用它来调试我们下面的操作

新建好的项目结构如上图所显

   因为我们这里要使用函数,所以我们右击项目---添加

我们可以看的到里面已经出了很多数据库中常用的对象了,

我们单击新建项也就是第一个

我们给函数名称改为StrCount意思就是统计一下输入的字符个数

我们选择的是用户定义的函数

好了单击添加就可以了,

系统会自动生成一段代码

 

代码

 

到这里我们的前期准备工作就完了,我们只要修改这个类就行了,

[Microsoft.SqlServer.Server.SqlFunction]
这句是表示在Sql中的对象类型

SqlFunction  就是函数

SqlProcedure  存储过程

SqlTrigger  触发器

还有其它的大家自己查看一下吧

第二步 部署自己定义函数

      我们这个函数是用来计算字符长度的我把完成的代码放在下在面

 

代码

 

现在函数写好了,这个函数就不做过多的解释了, 因这这个只是得到字符串的长度这东西太基础了,呵呵

我们怎么样才能在Sql2005里使用我们这个函数呢?

其实很简单我们生成一下项目,生成成功之后,我们右击项目

单击部署项目,等部署成功就可以了。那我们部署的程序在那里呢,现在我们打开Sql2005IDE

 找到如下图所示

我们会发现在Sql2005里的标题值函数里出现了一个我们自己定义的函数,那怎么使用他呢,很简单其实是跟我们平时使用的是一样的

我们新建查询

因为我们Sql默认的是关闭CLR功能的,我们需要用命令开启一下

看到如上图所显示的就表示 你的功能开启成功了,下面我们就可以自由的使用函数了,跟使用系统自己定义的函数是一样的,下面我统计几个大家可以看下图

 

 

  这样一这样

 

 这样就是利用sql的ClR执行c#程序了,是不是很方便,当然我们可以根据自己的需要把这个函数改的复咋一下,不过方法都是一样的像存储过程和触发器的实现原理都 也是这样的。

    我加上一段,调试功能 是.net里用来解决问题最多的功能了,那CLR是否支持呢?答案是肯定的,只要我们在这个Text.Sql文件里打个段点就行了,因为在这个文件里执行的结果和数据库里的是一样的

 

代码

 

 

    我们可以跟自己的Sql语句结合起来使用,就是用到我们自己定义的存储过程里这样可以把复咋的逻辑用c#代码来实现是不是感觉很方便,Clr是个好东西,他不仅仅只有这些,还有什么高级的功能 呢,我们下次博文接着说吧!!!

  

     为了方便大家写代码我在这里加上  

 

复制代码
use Text

EXEC sp_configure show advanced options,1;
go

EXEC sp_configure clr enabled,1
go

reconfigure with override;
go
复制代码

SQL Server CLR 集成简介