.NET编程和SQL Server ——Sql Server 与CLR集成
一、SQL Server 为什么要与CLR集成
1、 SQL Server 提供的存储过程、函数等十分有限,经常需要外部的代码来执行一些繁重的移植;
2、与CLR集成可将原本需要独立的程序来实现的功能迁移到SQL Server 内部进行数据操作;
3、T-SQL数据查询语言在返回数据集方面很好,但是除此之外表现不佳。与CLR的集成可解决这一问题;
4、.NET的操作代码和执行的速度比T-SQL快的很多。.NET程序是已经编译好的二进制代码,而不是作为存储过程来构建,不再编译就直接可运行。
二、SQL Server 中的程序集(编译、添加、修改、删除)
只有在添加了程序集后才能在该程序集的基础上建立CLR存储过程、CLR函数等。
1、CLR代码(编译)→DLL文件(注册)→SQL Server (作为数据库对象)→执行数据库操作 过程如下:
(1)将托管程序编写为一组类定义。编写好代码后编译成一个DLL文件;
存储过程、用户自定义函数、触发器的编写为类的静态方法;
用户自定义类型、聚合函数编写为一个结构体。
(2)DLL文件上传SQL Server 磁盘上,并使用create assembly 将DLL程序集存储到系统目录;
(3)创建SQL对象(函数、存储过程、触发器等)并将其绑定到程序集的入口点;
存储过程:create procedure
用户自定义函数:create function
触发器:create trigger
用户自定义类型:create type
聚合函数:create aggregate
(4)像使用T-SQL例程一样使用。
2、SQL Server 中的程序集(创建程序集并上载到SQL Server 实例然后创建数据库对象)
(1)SQL Server 2008默认情况下禁用了CLR集成的功能,必需先启用CLR集成后才能在SQL Server 访问.NET对象。
启用CLR集成
exec sp_configure 'show advanced options','1';
go
reconfigure;
go
exec sp_configure 'clr enabled','1';//开启CLR集成
go
reconfigure;
go
解释
(2)将DLL程序集添加到SQL Server 中。在SQL Server 中添加程序集使用create assembly命令。
create assembly assembly_name(程序集名)
[authorization owner_name]
from {
[with permissi|external_access|unsafe}]
其中,