您好,登錄后才能下訂單哦!
SQL CLR (SQL Common Language Runtime) 是自 SQL Server 2005 才出現(xiàn)的新功能,它將.NET Framework中的CLR服務(wù)注入到 SQL Server 中,使得.NET代碼可在SQL Server服務(wù)器進(jìn)程中執(zhí)行。
通過在 Microsoft SQL Server 中托管 CLR(稱為 CLR 集成),開發(fā)人員可以在托管代碼中編寫存儲過程、觸發(fā)器、用戶定義函數(shù)、用戶定義類型和用戶定義聚合函數(shù), 改變了以前只能通過T-SQL語言來實(shí)現(xiàn)這些功能的局面。因?yàn)橥泄艽a在執(zhí)行之前會編譯為本機(jī)代碼,所以,在有些方案中可以大大提高性能。
本文記錄這兩天SQLCLR的研究使用過程,實(shí)現(xiàn)調(diào)用函數(shù)傳入GUID,通過命名管道發(fā)送到目標(biāo)應(yīng)用。數(shù)據(jù)庫是SQL Server2008R2
實(shí)現(xiàn)方式是將.NET DLL類庫注冊到SQL Server,從SQL Server中用戶定義函數(shù)調(diào)用.NET類庫中的方法。
★DLL類庫
namespace SQLCLRlib
{
public class ControlActive
{
/// <summary>
/// send command
/// </summary>
/// <param name="MBID">目標(biāo)ID</param>
/// 1:發(fā)送成功 0:發(fā)送失敗
public static string sendControlCommand(string MBID)
{
try
{
NamedPipeClient npc = new NamedPipeClient("localhost", "jc-pipe");
return npc.Query(MBID);
}
catch (Exception ex)
{
return ex.Message;
}
}
}
}
若方法中需要訪問數(shù)據(jù)庫等則需要添加方法的聲明:[Microsoft.SqlServer.Server.SqlFunction(SystemDataAccess = SystemDataAccessKind.Read,DataAccess = DataAccessKind.Read)]
否則報異常:在此上下文中不允許訪問數(shù)據(jù)。此上下文可能是不帶 DataAccessKind.Read 或 SystemDataAccessKind.Read 標(biāo)記的函數(shù)或方法,也可能是從表值函數(shù)的 FillRow 方法為獲取數(shù)據(jù)而進(jìn)行的回調(diào),還可能是 UDT 驗(yàn)證方法。
VS中也有專門的CLR項(xiàng)目模板:添加新建項(xiàng)目,選擇模板"數(shù)據(jù)庫"->SQL Server,選擇CLR數(shù)據(jù)庫項(xiàng)目
★SQL Server中的配置
--選擇使用哪個數(shù)據(jù)庫
--USE DBname
--查看CLR是否開啟
--sp_configure 'clr enabled'
--更改安裝CLR 1:開啟 0:關(guān)閉
--exec sp_configure 'clr enabled',1
--reconfigure
--注冊DLL,SQL2008R2支持3.5,類庫項(xiàng)目的目標(biāo)框架必須對應(yīng)SQL Server的支持版本
--TRUSTWORTHY:SQL實(shí)例是否信任數(shù)據(jù)庫的內(nèi)容,默認(rèn)OFF
--ALTER DATABASE DBname SET TRUSTWORTHY ON;
--create assembly asmSQLCLRlib from 'D:\...\SQLCLRlib.dll' WITH PERMISSION_SET = UNSAFE;
--創(chuàng)建自定義函數(shù)
--create function dbo.clrControlActive
--(
-- @MBID as nvarchar(36)
--)
--returns nvarchar(max) as EXTERNAL NAME [asmSQLCLRlib].[程序集.類名].[方法名]
--使用自定義函數(shù)
select dbo.clrControlActive('58A3D48E-A713-49C3-8FC6-76C8DF0DFA34')
參考資料
http://www.cnblogs.com/hsrzyn/archive/2013/05/28/1976555.html
http://www.cnblogs.com/wshcn/archive/2011/12/02/2271630.html
http://www.tuicool.com/articles/fANVzmn
在此感謝以上資料的作者
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。