博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql Server 添加外部程序集基本操作
阅读量:5269 次
发布时间:2019-06-14

本文共 1818 字,大约阅读时间需要 6 分钟。

原文:

简介:有时候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:\Test\MyClr\MyClr\bin\Release\MyClr.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 MyClr1FROM 'I:\Test\MyClr\MyClr\bin\Release\MyClr.dll' WITH permission_set = Safe;

 

叮叮,立即中奖

 

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

 

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

添加函数映射CREATE function ClrFBitContains( @a as INT , @b as int )returns INTas  EXTERNAL NAME MyClr1.CLRClass.MyFun确认是否需要打开CLR执行权限exec sp_configure 'clr enabled', '1'reconfigureSELECT dbo.ClrFBitContains(1,3)PS:每次修改完动态库,需要重新执行修改一次程序集定义才能更新同步上去CREATE ASSEMBLY MyClr1    FROM 'I:\Test\MyClr\MyClr\bin\Release\MyClr.dll'

 

 
好~搞掂

 

posted on
2014-11-18 15:27 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/4105912.html

你可能感兴趣的文章
Dreamweaver cc新版本css单行显示
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
javascript之Style物
查看>>
Factory Design Pattern
查看>>
P1192-台阶问题
查看>>
Java大数——a^b + b^a
查看>>
简单的数据库操作
查看>>
帧的最小长度 CSMA/CD
查看>>
树状数组及其他特别简单的扩展
查看>>
普通求素数和线性筛素数
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
51nod1076 (边双连通)
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>