简介:有时候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 = ;
[Microsoft.SqlServer.Server.SqlFunction]
public static int MyFun(int a, int b) //必须使用静态方法,非静态方法。
{
i += ;
return a <= b ? a : b;
}

然后在数据库执行

ALTER ASSEMBLY MyClr1
FROM '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 权限的证书或非对称密钥加以签名
go
ALTER ASSEMBLY MyClr1
FROM 'I:\Test\MyClr\MyClr\bin\Release\MyClr.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', ''
reconfigure SELECT dbo.ClrFBitContains(1,3) PS:每次修改完动态库,需要重新执行修改一次程序集定义才能更新同步上去
CREATE ASSEMBLY MyClr1
FROM 'I:\Test\MyClr\MyClr\bin\Release\MyClr.dll'
 
好~搞掂

Sql Server 添加外部程序集基本操作的更多相关文章

  1. SQL Server通过外部程序集注册正则表达式函数(CLR函数) [转]

    转自:http://blog.csdn.net/binguo168/article/details/76598581 1.下载dll程序集(通过C#编写的支持正则的方法),百度网盘下载: 1.1如果只 ...

  2. SQL Server添加MDW性能监控报表(转载)

    10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...

  3. SQL Server 部署CLR程序集错误`6218`

    Visual Studio 2015中开发的SQL Server项目,添加了用户自定义函数,需要部署到SQL Server 2005上, 在部署时报错: (70,1): SQL72014: .Net ...

  4. SQL Server 添加链接服务器

    背景 在SQL SERVER中,如果我们查询数据库需要关联另外一台数据库中表,在这种情况下我们可以通过添加服务器链接来实现. 案列 方式1.sql server 提供了图形化界面,如下: 右键> ...

  5. SQL Server 添加登录账户配置权限

    一.新建登录名 1. 在登录名右侧的文本框中输入新建的管理员账号名称:2. 一对单选按钮组中,选择Sql Server 身份验证,并输入登录密码:3. 勾选强制实施密码策略复选框:(密码策略一般是指加 ...

  6. Sql Server添加用户

    1.sa用户登陆之后,在安全性中新建登录名 2.添加登录名,下面的默认数据库选择该用户可访问的默认数据库 3.服务器角色中选择public 4.用户映射中选择该用户可访问的数据库,数据库角色一般选择p ...

  7. SQL server 添加主外键约束

    ---添加主键约束   alter table 表名 add constraint 约束名 primary key (主键)          - --添加唯一约束   alter table 表名 ...

  8. sql server添加sa用户和密码

    昨天给网站“搬家”(更换服务器),我是在win7上安装的 sql server2012,安装过程很顺利,用“Windows 身份验证” 也可正常访问.但是用sa用户访问数据库出现了 错误:18456. ...

  9. 从零开始学习SQL SERVER(2)--- 基本操作及语句

    声明:仅为本人随笔及经验之谈,有错误敬请指出. # 后的文字为注释 Microsoft SQL Server Management Studio 中的SQL命令 添加数据库 1 CREATE DATA ...

随机推荐

  1. 【Java每日一题】20161129

    package Nov2016; public class Ques1129 { public static void main(String[] args) { final String str = ...

  2. 似乎都设置了utf-8,为什么出现乱码

    解决方法如下: ****************************************************************************************[来自我 ...

  3. 2016暑假多校联合---Counting Intersections

    原题链接 Problem Description Given some segments which are paralleled to the coordinate axis. You need t ...

  4. Java面试题汇总(一)

    1.谈谈你对http中post和get访问的理解. http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认 为: ...

  5. Genymotion无法下载OVA文件

    百度 下载Genymotion离线OVA文件(http://pan.baidu.com/s/1jIe5pjC ) 将OVA离线文件放到这个目录下:C:\Users\Administrator\AppD ...

  6. Hibernate(九)__OpenSessionInView解决懒加载问题

    什么是OpenSessionInView? 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关 ...

  7. CSDN数据库被爆 统计CSDN用户都喜欢哪些密码

    今天有黑客在网上公开了知名网站CSDN的用户数据库,这是一次严重的暴库泄密事件,涉及到的账户总量高达600万个.有人写了一个小程序,统计了这次公布的 6428632 个 CSDN 哪些密码出镜率较高? ...

  8. 为Titanium创建自己的安卓推送模块

    在手机应用中,推送是一个非常重要的功能.相对来说ios应用的推送功能很容易做,因为它统一都是用苹果的APNS服务实现的.但安卓这边就比较混乱了,虽然谷歌也推出了类似苹果的官方推送服务,但由于谷歌的服务 ...

  9. 编写jquery常用插件的基本格式

    写jquery插件需要明白的那些知识点 1.jquery中$是神马?$.fn又是神马? 稍微有jquery经验的都知道在jquery中$等价于jQuery,在控制台一试便知: 我们在jquery(1. ...

  10. jQuery.extend()方法和jQuery.fn.extend()方法源码分析

    这两个方法用的是相同的代码,一个用于给jQuery对象或者普通对象合并属性和方法一个是针对jQuery对象的实例,对于基本用法举几个例子: html代码如下: <!doctype html> ...