一、示例演示
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相應的資料庫可以看到儲存過程目錄及程式集等目錄下有相應建立的物件了)