Sql Server 添加表面程序集基本操作

去掉静态变量和ReadOnly就不说了。

叮叮,立刻中奖

一旦有静态变量,在Safe 方式下就会报错了

 

对此利用 SAFE 或 EXTERAV4NAL ACCESS 权限集创造的次序集:

  UNSAFE 格局是不受任何限制的拜会财富。

好~搞掂

  • 次第集代码应是体系安全的。通过对先后集运行公共语言运维时表明工具可确立项目安全。
     
  • 程序集的类中不应包涵别的静态数据成员,除非那些成员标记为只读。
  • 先后集中的类无法蕴涵终结器方法。

那是3头手册上边对那两种方式的限定。

 

 

ALTER DATABASE TestDB set TRUSTWORTHY ON;     --
数据库所有者(DBO)拥有 UNSAFE ASSEMBLY 权限,且数据库具有 TRUSTWORTHY 数据库属性;或者,程序集已使用其对应登录名具有 UNSAFE ASSEMBLY 权限的证书或非对称密钥加以签名
 go
ALTER ASSEMBLY MyClr1
FROM 'I:\Test\MyClr\MyClr\bin\Release\MyClr.dll' WITH permission_set = UNSAFE;
go

--执行成功

解决方法。去掉静态变量,将静态变量改为ReadOnly情势,或然将顺序集改为
UNSAFE格局。

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

    } 

 

 

CREATE ASSEMBLY MyClr1
    FROM 'I:\Test\MyClr\MyClr\bin\Release\MyClr.dll' 
        WITH permission_set = Safe/EXTERNAL ACCESS/UnSafe; -- (默认推荐/可以访问外部资源/不受限制地访问资源)

 

简介:有时候Sql
Server的放权函数未有那么好用的时候,能够引用一下外部程序集,上面献下丑,做下添加外部程序集操作

然后在数据库执行 

2、添加程序集。

 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:\Test\MyClr\MyClr\bin\Release\MyClr.dll' WITH permission_set = Safe;

图片 1

 

 

 

一、准备程序,编写翻译出三个MyCL奥迪Q5的DLL.

更改为UNSAFE情势,能够进行以下语句

 

添加函数映射
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:\Test\MyClr\MyClr\bin\Release\MyClr.dll' 

 

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

相关文章