zoukankan      html  css  js  c++  java
  • Sql Server 添加外部程序集基本操作

    简介:有时候Sql Server的内置函数没有那么好用的时候,可以引用一下外部程序集,下面献下丑,做下添加外部程序集操作

    1、准备程序,编译出一个MyCLR的DLL.

    public class CLRClass
        {
            [Microsoft.SqlServer.Server.SqlFunction]
            public static int MyFun(int a, int b)   //必须使用静态方法,非静态方法会报错。
            {
                return a <= b ? a : b; //其实就是一个判断最小值函数
            }
    
        } 

    2、添加程序集。

    CREATE ASSEMBLY MyClr1
        FROM 'I:TestMyClrMyClrinReleaseMyClr.dll' 
            WITH permission_set = Safe/EXTERNAL ACCESS/UnSafe; -- (默认推荐/可以访问外部资源/不受限制地访问资源)
    • 对于使用 SAFE 或 EXTERNAL ACCESS 权限集创建的程序集:
      • 程序集代码应是类型安全的。通过对程序集运行公共语言运行时验证工具可建立类型安全。  
      • 程序集的类中不应包含任何静态数据成员,除非这些成员标记为只读。
      • 程序集中的类不能包含终结器方法。

      UNSAFE 模式是不受任何限制的访问资源。

    这是联机手册上面对这几种模式的限制。

    如果有静态变量,在Safe 模式下就会报错了

     public class CLRClass
        {
            static int i = 0;
            [Microsoft.SqlServer.Server.SqlFunction]
            public static int MyFun(int a, int b)   //必须使用静态方法,非静态方法。
            {
                i += 1;
                return a <= b ? a : b;
            }

    然后在数据库执行 

    ALTER ASSEMBLY MyClr1
    FROM 'I:TestMyClrMyClrinReleaseMyClr.dll' WITH permission_set = Safe;

    叮叮,立即中奖

    解决方法。去掉静态变量,将静态变量改为ReadOnly模式,或者将程序集改为 UNSAFE模式。
    去掉静态变量和ReadOnly就不说了。
    改变为UNSAFE模式,可以执行以下语句
    ALTER DATABASE TestDB set TRUSTWORTHY ON;     --
    数据库所有者(DBO)拥有 UNSAFE ASSEMBLY 权限,且数据库具有 TRUSTWORTHY 数据库属性;或者,程序集已使用其对应登录名具有 UNSAFE ASSEMBLY 权限的证书或非对称密钥加以签名
     go
    ALTER ASSEMBLY MyClr1
    FROM 'I:TestMyClrMyClrinReleaseMyClr.dll' WITH permission_set = UNSAFE;
    go
    
    --执行成功

    创建了程序集,然后添加个函数映射来使用

    添加函数映射
    CREATE function ClrFBitContains
    ( @a as INT , @b as int )
    returns INT
    as
      EXTERNAL NAME MyClr1.CLRClass.MyFun
    
    
    确认是否需要打开CLR执行权限
    exec sp_configure 'clr enabled', '1'
    reconfigure
    
    
    SELECT dbo.ClrFBitContains(1,3)
    
    PS:每次修改完动态库,需要重新执行修改一次程序集定义才能更新同步上去
    CREATE ASSEMBLY MyClr1
        FROM 'I:TestMyClrMyClrinReleaseMyClr.dll' 
     
    好~搞掂
  • 相关阅读:
    AVL自平衡二叉树
    笔试+面试信息整理----面向笔试学习、面向面经编程
    传入值参数&传入引用参数的区别
    NLPIR智能挖掘实现行业大数据应用价值
    NLPIR大数据挖掘融合库、智、理三大先进理论技术
    NLPIR智能语义挖掘文本大数据深层意义
    NLPIR智能语义技术从采集到分析一步到位
    灵玖软件:NLPIR智能挖掘对文本数据精细化分析
    九眼合同智能审核系统运用NLPIR大数据技术进行核查
    NLPIR九眼智能审核平台助合同文本深度核查
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/3990169.html
Copyright © 2011-2022 走看看