SQL SERVER 的 CLR 存储过程

130 篇文章 2 订阅

 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 CALLER
AS
EXTERNAL 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';
go
reconfigure;
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '0';
go


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值