在看如何做之前我要先说明一点理论的事,原因是为了整体了解CLR在SQL2005中是怎么一个情况,我知道绝大部分做开发都讨厌理论。

CLR与SQL2005数据库引擎关系

实际上CLR是寄生在SQL2005数据库引擎里面的,这也说明了相比较DB2和ORACLE与.NET集成相比更加有优势。SQL2005数据库引擎可直接对CLR进行例如:内存管理、线程、垃圾回收。而与其他产品DB2或ORACLE的CLR是使用外部进程,这意味着CLR与SQL2005数据库引擎会竞争系统资源。

启用CLR支持功能

默认是关闭状态,运行下面可开启:

sp_configure 'show advanced options', 1 GO RECONFIGURE GO sp_configure 'clr enabled', 1 GO RECONFIGURE GO

开发.NET数据库对象,大概需要以下这么一些步骤:

  1. 用VS创建你所熟悉语言的SQL SERVER项目。
  2. 编辑成DLL。
  3. 将DLL注册到SQL2005中。

大概可以创建包括:存储过程、触发器、聚合、用户自定义函数、用户自定义类型这么一些CLR数据库对象。

支持正则表达式函数创建示例

让SQL2005支持正则表达式经常看到有人这么问的,我就做这么一个示例好了,我这里是VS2010和SQL2005环境:

  1. 新建Visual C# SQL CLR数据库项目。
  2. 添加一个“用户自定义函数”类,命名:Regex
[Microsoft.SqlServer.Server.SqlFunction]    public static SqlString Regex(SqlChars input, SqlString pattern)    {        Regex regex = new Regex(pattern.Value);        return regex.Match(new string(input.Value)).Value;    }

最后右击项目-部署。

此时你就可以在你创建CLR数据库项目时指定的数据库下:可编程性-函数-标量值函数找到dbo.Regex

调用方式:

SELECT dbo.Regex('a0001', N'[a-z][0-9]{4}') FROM [Table]