一、示例演示
1、用C# 建立数据库 CRL 项目
public partial class MyClr
{
[
Microsoft.SqlServer.Server.SqlFunction
]
public static SqlBoolean CLRFBitContains(string MyBigIntValue,
int Row)
{
// 在此处放置代码
return (new MyBigInt(MyBigIntValue)
& MyBigInt.CreateByBitPositon(
Convert.ToUInt32(Row)))
== MyBigInt.Zero;
}
}
2、数据库初始化
exec sp_configure
'
show advanced options
',
'
1
';
go
reconfigure;
go
exec sp_configure
'
clr enabled
',
'
1
'
go
reconfigure;
exec sp_configure
'
show advanced options
',
'
1
';
go
ALTER
DATABASE
DB_Name
set TRUSTWORTHY
on;
go
3、数据库添加程序集
create assembly MyClr
from
'
R:\MyApp\MyClr\MyClr\bin\Debug\MyClr.dll
'
WITH permission_set
= Safe;
4、数据库添加函数映射
create
function ClrFBitContains
(
@val
as
nvarchar(
4000) ,
@RowIndex
as
int )
returns
bit
as
external name MyClr.MyClr.CLRFBitContains ;
TestSql:
select dbo.ClrFBitContains(
'
F0F
',
11)
二、在sqlserver中如果要使用一个程序集一般有如下注意事项
1、打开sqlserver 的CLR支持,即在Sql Server中执行这段代码可以开启CLR
exec sp_configure
'
show advanced options
',
'
1
';
go
reconfigure;
go
exec sp_configure
'
clr enabled
',
'
1
'
go
reconfigure;
exec sp_configure
'
show advanced options
',
'
1
';
go
2、是否需要访问外部资源,如果需要访问外部资源还需要执行下面的,即打开数据库的TRUSTWORTHY 属性
ALTER
DATABASE
DB_Name
set TRUSTWORTHY
on;
三、在sqlserver中如果要使用一个程序集一般有两种方法
方法一:通过T-SQL手动将该程序集放入到SQL Server 其步骤如下
1、创建将要使用的程序集.dll
程序上没什么稀奇的,跟普通的ado.net的程序差不多主要就是方法上加了一个属性 (<System.Data.Sql.SqlProcedure(name:="WriteHashedPassword")>)
2、部署程序集到sqlserver
a、打开sqlserver中clr中相关的支持(方法如上)
b、添加程序集到sqlserver
Create assembly SqlServerProject1
authorization dbo
from
'
E:\test\dotnet\SqlServerProject1\SqlServerProject1\bin\SqlServerProject1.dll
'
with permission_set
=external_access
c、添加存储过程
Create
Procuce
[
dbo
].
[
存储过程名称
]
@from
[
nvarchar
](
50),
--
参数列表
@to
[
nvarchar
](
50)
WITH
EXECUTE
AS CALLER
AS
EXTERNAL NAME
[
程序集的名称
].
[
StoredProcedures
].
[
存储过程名称
]
d、执行存储过程
exec CLRSPTest
@sql
=
'
select * from t2
',
@path
=
'
e:\a\11.txt
'
方法二:通过Visual Studio 2005创建供并部署SQL Server 2005用的Assembly
1、打开Visual Studio 2005新建项目类型为数据库的sqlserver项目
2、创建所需要的存储过程,函数等
3、编译该项目
4、部署该项目(此时我们打开sqlserver相应的数据库可以看到存储过程目录及程序集等目录下有相应创建的对象了)