zoukankan      html  css  js  c++  java
  • 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 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


  • 相关阅读:
    Java学习笔记之——常用快捷键(eclipse)
    Java学习笔记之——Java介绍
    Linux系统下curl命令上传文件,文件名包含逗号无法上传
    系统操作注意事项
    Shell脚本8种字符串截取方法总结
    亚特兰蒂斯酒店-服务器不能访问故障
    Keepalived 进程无法关闭
    python2.7.9安装mysql-python模块
    卸载Mariadb-报错
    新添加一块硬盘制作LVM卷并进行分区挂载
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258197.html
Copyright © 2011-2022 走看看