Skip to content

SQL2005的CLR开发

在看如何做之前我要先说明一点理论的事,原因是为了整体了解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]

相关日志

Categories: 技术.

Tags: ,

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word