SQL SERVER 的 CLR 存储过程

网友投稿 259 2022-09-14

SQL SERVER 的 CLR 存储过程

SQL SERVER 的 CLR 存储过程MS SQL的TransactSQL语法比较单一,用起来也很不习惯,如果想实现一些复杂一点的逻辑,不方便。可以利用NET编码,编译成DLL,然后在SQL SERVER里引用。一、    编码1、    新建一个项目,数据库类型 --》SQL SERVER

2、    新建“存储过程”

3、    编码也没有什么特别,主要是有些数据类型有讲究。比如参数,应该能被SQL SERVER认识或方便调用传送,象整数就用SqlInt32什么的。但函数内部,就似乎没什么讲究。

[Microsoft.SqlServer.Server.SqlProcedure]public static void UserInit(SqlInt32 iUserId){ int i = 0;}

4、    数据库连接。由于这些函数和方法最终都在SQL SERVER里调用,那么调用它们之前,肯定已经和数据库连接上了,所以应该使用当前的数据库连接。

[Microsoft.SqlServer.Server.SqlProcedure]public static void UserInit(SqlInt32 iUserId){ int i = 0; using (SqlConnection connection = new SqlConnection("context connection = true")) {……}}

二、    添加部署1、    代码编写完后,编译成DLL。然后打开SQL SERVER的目标数据库 --》程序集 --》添加程序集,将DLL导入。给该程序集起个名字,比如叫myClrDll

2、    在目标数据库新建一个存储过程,使用程序集里的函数。

CREATE PROCEDURE [dbo].[clr_User_Init] @UserId [int]WITH EXECUTE AS CALLERASEXTERNAL NAME [myClrDll].[StoredProcedures].[UserInit]GO

三、    更新如果代码更改,重新编译成DLL,可以用以下语句重新导入ALTER ASSEMBLY [myClrDll]FROM 'd:/code/temp/myClrDll.dll'注意'd:/code/temp/myClrDll.dll'一定是数据库所在机器的路径。通常我们程序和数据库不同机器,所以这个路径常常搞错。

四、注意

CLR中的SqlString,在T-sql里面,要写成:NVarChar(MAX)。

五、数据库不支持CLR怎么办?

​​禁止在.NET Framework 中执行用户代码。启用"clr enabled" 配置选项​​

exec sp_configure 'show advanced options', '1';goreconfigure;goexec sp_configure 'clr enabled', '1'goreconfigure;exec sp_configure 'show advanced options', '0';go

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:靠着爆品营销,兰和逐本能成为下一个贝德玛吗?
下一篇:SQL SERVER 的 CLR表值函数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~