简介:有时候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. 禅道 Rest API 开发

    在老的 PHP 系统中使用 PHP 5.3以后的库 所谓老的系统,是指没有使用PHP 5.3以上命名空间(namespace)特性编码的系统. 但是,只要你的系统运行在 PHP 5.3及以上的环境,在 ...

  2. 11.20 CSS定位智博星网页制作

    <html xmlns="http://www.w3.org/1999/xhtml">   <head>   <meta http-equiv=&qu ...

  3. php PDO调用带有out参数的存储过程(原创)

    这几天比较闲学了下PHP, 开发工具zendphp,server下的一个集成工具WampServer. 感觉php实现一个功能写的代码比asp.net java都少,特别是数据库访问这块,如果是asp ...

  4. 回文字算法(java版本)

    package com.gdh.backtext;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry; p ...

  5. Window对象

    Window对象:         Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框 ...

  6. HTML5移动开发学习笔记

    最近做webapp项目过程中,发现坑还是挺多的,以下是网络收集一些开发中的常见问题及知识汇总,以便查阅,慢慢更新:). meta 基础知识 H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 < ...

  7. 如何收缩超大的SharePoint_Config数据库

    前言 在已经运行了2年多的SharePoint服务器上,发现SharePoint_Config的数据库文件越来越大,已经达到90几个GB,收缩可以减小20几个GB,但是一周以后又会恢复到90几个GB大 ...

  8. 无线安全审计工具 Fern WiFi Cracker

    使用这款工具前最好自定义一个MAC地址,以便隐藏我们的真实MAC地址信息. 由于Fern WiFi Cracker是图形界面的,不需要敲命令,所以操作起来比Aircrack-ng简单了许多. 首先选择 ...

  9. MyEclipse 2015 CI 14发布(附下载)

    支持Web和Node.jsd的JavaScript Debugger调试器,新版本功能更加强大,在MyEclipse调试web应用程序变得更方便.调试器支持断点.变量和表达式. 类的动态预加载用Hot ...

  10. 小谈KVC中KeyPath的集合运算符

    由于知识点比较简单,这里不再陈述一大堆的原理,直入主题. KVC中的集合运算符有以下三类: 1.简单集合运算符:@avg.@sum.@max.@min.@count (只能用在集合对象中,对象属性必须 ...