【转】SQL SERVER CLR存储过程实现
最近做一个项目,需要做一个SQL SERVER 2005的CLR的存储过程,研究了一下CLR的实现。为方便以后再使用,在这里总结一下我的实现流程,也供对CLR感兴趣但又不知道如何实现的朋友们做一下参考,如果有不同意见,望多指教。在这里先以实现CLR存储过程为例子来进行说明。
1。首先,启用数据库的CLR功能
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
2。即然是要创建CLR存储过程,那么首先就得用C#(或者其它语言)编写一个类库实现存储过程要执行的逻辑。创建的这个类库可以有两种方法:一种是创建一个普通的C# Class library;另一个是用VS2008创建一个SQL Server Project,方法:New Project/Database Projects/Microsoft SQL Server/SQL CLR/SQL Server Project.
无论使用哪一种方法,最终都应满足下面这两个条件:
(1)对于SQL Server 2005,所使用的.net程序集必须是.NET 2.0的。
(2)要做为存储过程的方法,必须是static,public,且加有SqlProcedure附加属性。
[SqlProcedure]
public static void ExecSQLCLRProc(int messageID, int iVersion)
{ }
在这里我使用的是用VS建一个SQL Server Project,因为它可以自动为我们实现以上这两个步骤。有了[SqlProcedure]这个属性,SQL Server就可以使用这个公开的方法创建存储过程了。
3。建好CLR Project后,就需要将CLR实施到数据库了。
可以用两种方法实施:
(1):在VS2008中使用Deploy操作,就可以自动将建好的存储过实施到数据库。
(2):在T-SQL里执行:
CREATE ASSEMBLY FROM 'DLL Path' WITH PERMISSION_SET = SAFE|EXTERNAL_ACCESS|UNSAFE为DLL创建程序集。
Create Proc NCIP_ParseMessage
params
AS
EXTERNAL NAME methodpath
依据程序集里公开的方法创建存储过程。
重点说明的是,SQL Server对CLR程序集提供了三种访问权限级别:SAFE,EXTERNAL_ACCESS,UNSAFE。如果要实施的是SAFE的级别,那么直接使用上面的两种的方法中的任何一种就可以实施了。但是由于我在存储过程中要访问网络资源,所以要用EXTERNAL_ACCESS或UNSAFE的权限级别实现
4。实现EXTERNAL_ACCESS权限级别的CLR存储过程。(不推荐使用UNSAFE)
(1)对SQL CLR使用strong name.先用SN.exe生成一个SNK文件,右击项目-properties-Signing-选中Sign the assembly,选择生成的SNK文件。
(2)在数据库里为DLL生成一个KEY。
Use master
CREATE ASYMMETRIC KEY SQLCLRKey FROM EXECUTABLE FILE = 'DLL Path'
CREATE LOGIN loginname FROM ASYMMETRIC KEY SQLCLRKey
GRANT EXTERNAL ACCESS ASSEMBLY TO loginname
然后在再用 3 中的方法就可以实现。
5。多个程序集相互引用。如果有多个程序集,并且之前存在引用的话,那么可能还需要做以下的操作:
(1)在每个被引用的project的AssemblyInfo.cs加下面的代码:
using System.Security;
[assembly: AllowPartiallyTrustedCallers]
(2)如果是用SQL Server Project,还要将项目属性/Assembly name 改为唯一的名字
(3)为每一个别Project生成一个SNK文件,并创建相应的ASYMMETRIC KEY,LOGIN,授于LOGIN相应的访问权限。
【转】SQL SERVER CLR存储过程实现的更多相关文章
- SQL Server ->> CLR存储过程枚举目录文件并返回结果集
因工作需要写了个CLR存储过程枚举目录文件并返回结果集 using System; using System.IO; using System.Collections.Generic; using S ...
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...
- SQL Server CLR 使用 C# 自定义存储过程和触发器
资源来源:https://www.cnblogs.com/Brambling/p/8016060.html SQL Server CLR 使用 C# 自定义存储过程和触发器 这一篇博客接着上一篇博 ...
- SQL Server CLR 使用 C# 自定义函数
一.简介 Microsoft SQL Server 2005之后,实现了对 Microsoft .NET Framework 的公共语言运行时(CLR)的集成.CLR 集成使得现在可以使用 .NET ...
- 在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?
在sql server中建存储过程,如果需要参数是一个可变集合的处理 原存储过程,@objectIds 为可变参数,比如 110,98,99 ALTER PROC [dbo].[Proc_totalS ...
- 在易语言中调用MS SQL SERVER数据库存储过程方法总结
Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...
- SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
SQL Server 2008 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过 存储过程 创建存储过程 use pubs --pubs为数据库 go create proc ...
- SQL Server中存储过程 比 直接运行SQL语句慢的原因
问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过 ...
- ADO.NET访问SQL Server调用存储过程带回参
1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...
随机推荐
- static讲解
static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被stati ...
- Matlab神经网络工具箱学习之一
1.神经网络设计的流程 2.神经网络设计四个层次 3.神经网络模型 4.神经网络结构 5.创建神经网络对象 6.配置神经网络的输入输出 7.理解神经网络工具箱的数据结构 8.神经网络训练 1.神经网络 ...
- WindowsServer问题总结
1.System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志.不可访问的日志: Security.在安装的“回滚”阶段发生异常.将忽略该异常并继续回 ...
- html部分---样式表,选择器;
<1.内联样式,优点:控制精确,缺点:代码重用性差,页面代码乱.> <div style="background-color:#0F0"></div& ...
- IOS中如果使用RGB实现背景色
在开发的过程中.我们往往会碰到图片很多的情况.这时候我们的程序打包就会变得很大.一些纯色的图片可以用RGB来实现.这样可以减少内存的占用MAC本中有数码测色计这个功能.通过这个我们可以获得图片的RGB ...
- Linux系统编程@多线程编程(一)
多线程编程 涉及操作系统原理概念 时间片 进程状态 上下文: 对进程来说,就是进程的执行环境,具体就是各个变量和数据,包括所有的寄存器变量.打开的文件.内存信息等. 进程的写时复制:由于一般 fork ...
- LVM磁盘管理
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html Linux LVM硬盘管理及LVM扩容 LVM磁盘管理 一.LVM简介... ...
- java 锁讲解
每个锁对象都有两个队列,一个是就绪队列,一个是阻塞队列,就绪队列存储了将要获得锁的线程,阻塞队列存储了被阻塞的线程,当一个被线程被唤醒 (notify)后,才会进入到就绪队列,等待获得锁.当一开始线程 ...
- 从开发的角度比较 ASP.NET Web 服务与 WCF
Windows Communication Foundation (WCF) 具有一个 ASP.NET 兼容模式选项,用户使用此选项可以对 WCF 应用程序进行编程和配置,使其像 ASP.NET We ...
- html dl dt dd标签元素语法结构与使用
dl dt dd认识及dl dt dd使用方法 <dl> 标签用于定义列表类型标签. dl dt dd目录 dl dt dd介绍 结构语法 dl dt dd案例 dl dt dd总结 一. ...