在我看来,clr 存储过程是非常好的东西,它弥补了t-sql 做为一门查询语言的不足,使得数据库在处理逻辑问题的时候不像以前那么蹩脚,许多DB程序员为了用 t-sql实现一个简单的过程逻辑而大伤脑筋,比如一个非常间的需求,我想传递一个数组,里面装有id,想更新这些id的行的状态,就是在传递一个数组到存储过程中并分割成若干个id,一个在C#中非常简单的实现却要为t-sql绞尽脑汁。。。。相信大多数程序员都有我类似的苦恼。而在最近的项目中,涉及到由联通过来的短信数据处理,预处理短信表是由另外一个模块插入的,我负责的模块需要对这个预处理短信表的记录读取出来,定时扫描整个表,如果有需要处理的短信,那么要由windows服务定时读取出来,并且根据短信种类的不同做业务逻辑的分发,整个模块的性能要求非常高,所有的上行短信都要经过这个表,并处理。每秒发生的开连接插入删除造作非常多。最开始的设计是使用windows服务定时扫表并更新回数据库,一条一条的更新回数据库。。。。其性能之差是难以想象的。所以准备采取clr存储过程结合job,把业务逻辑的分发也拿到数据库clr环境下做,节省往返开销和连接开销。

总之,t-sql 是一门面向查询的语言,以数据为主,但是对过程的处理支持却非常差劲,clr 集成就能非常好的弥补了这点。之所以写个开篇,是看到有些人还是对这种技术的应用环境的不了解。好了,接下来,我准备写一些关于clr 集成的 sql server 2005 下的应用,包括clr proc clr function 等。欢迎大家指正!

附上使用context connection 和使用一般数据库连接的对比图,大家可以参考一下。