SQL触发器原理启用.NET的类方法续SQLCLR运用
时间:2021-04-05

SQL CLR (SQL Common Language Runtime) 是自 SQL Server 2005 才发生的新作用,它将.NET Framework中的CLR服务项目引入到 SQL Server 中,促使.NET编码可在SQL Server网络服务器过程中实行。

根据在 Microsoft SQL Server 中代管 CLR(称之为 CLR 集成化),开发工作人员能够 在托管代码中撰写sql语句、触发器原理、客户界定涵数、客户界定种类和客户界定聚合函数, 更改了之前只有根据T-SQL语言表达来完成这种作用的局势。由于托管代码在实行以前会编译程序为该设备编码,因此 ,在有一些计划方案中能够 进一步提高特性。

文中纪录这几天SQLCLR的科学研究应用全过程,完成函数调用传到GUID,根据命名管道发送至总体目标运用。数据库查询是SQL Server2008R2

完成方法是将.NET DLL类库申请注册到SQL Server,从SQL Server中客户界定调用函数.NET类库中的方式。

★DLL类库

namespace SQLCLRlib
{
public class ControlActive
{
/// summary
/// send command
/// /summary
/// param name="MBID"总体目标ID/param
/// 1:发送成功 0:推送不成功
public static string sendControlCommand(string MBID)
{
try
{
NamedPipeClient npc = new NamedPipeClient("localhost", "jc-pipe");
return npc.Query(MBID);
}
catch (Exception ex)
{
return ex.Message;
}
}
}
}

若方式中必须浏览数据库查询等则必须加上方式的申明:[Microsoft.SqlServer.Server.SqlFunction(SystemDataAccess = SystemDataAccessKind.Read,DataAccess = DataAccessKind.Read)]

不然报出现异常:在这里前后文中不允许浏览数据信息。此前后文很有可能不是带 DataAccessKind.Read 或 SystemDataAccessKind.Read 标识的涵数或方式,也很有可能是以表值涵数的 FillRow 方式为读取数据而开展的回调函数,还可能是 UDT 认证方式。

VS中也有专业的CLR新项目模版:加上新建项目,挑选模版"数据库查询"-SQL Server,挑选CLR数据库查询新项目

★SQL Server中的配备

--挑选应用哪一个数据库查询

--USE DBname

--查询CLR是不是打开
--sp_configure 'clr enabled'
--变更安裝CLR 1:打开 0:关掉
--exec sp_configure 'clr enabled',1
--reconfigure
--申请注册DLL,SQL2008R2适用3.5,类库新项目的总体目标架构务必相匹配SQL Server的适用版本号

--TRUSTWORTHY:SQL案例是不是信赖数据库查询的內容,默认设置OFF

--ALTER DATABASEDBname SET TRUSTWORTHY ON;
--create assembly asmSQLCLRlib from 'D:\...\SQLCLRlib.dll' WITH PERMISSION_SET = UNSAFE;
--建立自定义函数
--create function dbo.clrControlActive
--(
--@MBID as nvarchar(36)
--)
--returns nvarchar(max) as EXTERNAL NAME [asmSQLCLRlib].[程序流程集.类名].[方式名]
--应用自定义函数
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

在这里谢谢之上材料的创作者