sql server的存储过程是一种服务器端编程的形式,有了sqlclr ,我们似乎可以走的更远些。在某些特定的场合,比方说vpn 环境,这种手段非常有效。
但是,总而言之,目前sqlclr 是个受限的环境。当你正准备使用sqlclr大展手脚时,一个无情的限制就会使你的幻想破灭。
首先,当你在sql server project,中,你发现不能引用其他类库项目,只能引用sql server project,其次,你无法引用其他第三方assembly ,因为这些assembly 首先需要加入到sql server catalog中(即需要通过Create assembly 语句将assmebly引入到sql server 数据库中)
hoho ,这显然不是什么限制,让我们将assembly导入到sql server数据库吧。然而,你发现你无法导入system.web.dll ,因为System.web.dll,system.enterpriseservices.dll和system.remoting.dll之间互相引用。
对于我而言,不能导入system.web.dll ,那就不能导入log4net.dll ,不能导入log4net.dll,就不能导入spring.core.dll,spring.aop.dll.
综上所述,在使用sqlclr 编程时,你不是随心所欲的,你必须小心的编写assmebly 使其能够为sql server所接受。
上面这个问题是bug还是限制,不得而知,大家可以参见这里 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=69686&SiteID=1
bob 的blog有相关的内容 http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=49ac0a31-6d2c-4dde-b1eb-c4637f9a6a09
http://staff.develop.com/bobb/weblog/PermaLink.aspx?guid=649034e0-46fb-4398-8c05-08a0fae2f51c
我个人更多 的把它看成是bug ,事实上,在vs 2005/sql server 2005中,有许多类似这样悬而未决的问题。个人对之是非常失望,或许,等第一个服务包出来后,他们能正常工作吧。或许,我应该先看看sql server express 是否解决了这个问题。
|