一、示例演示
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;
}
}
{
[ 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
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;
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)
( @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
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
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 ]. [ 存儲過程名稱 ]
@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相應的數據庫可以看到存儲過程目錄及程序集等目錄下有相應創建的對象了)