参考文章
MSSQLSERVER接入c#clr程序集,使c#函数变sql函数
SQL中采用Newtonsoft.Json处理json字符串
操作步骤
1.新建项目->已安装->模版->其它语言->SQL Server
2.项目右键->添加->新建项->SQL CLR C#->SQL CLR C# 用户定义的函数
3.C# 的函数方法
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean IsMatch(string Input, string Pattern)
{
return new SqlBoolean(Regex.IsMatch(Input, Pattern));
}
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString RegexReplace(string Input, string Pattern, string Replacement)
{
return new SqlString(Regex.Replace(Input, Pattern, Replacement));
}
}
4.程序发布(方法一):
a.程序发布前调整一下项目属性中目标平台和目标框架,我这里用的是SQL Server 2008 框架为.Net 3.5
b.开启数据库服务器配置选项clr enabled
选择数据库 在所选数据库上执行
---开启所有服务器配置选项
EXEC sp_configure N'show advanced options', N'1'
RECONFIGURE WITH OVERRIDE
--开启clr enabled 选项
EXEC sp_configure N'clr enabled', N'1'
RECONFIGURE WITH OVERRIDE
--关闭所有服务器配置选项
EXEC sp_configure N'show advanced options', N'0'
RECONFIGURE WITH OVERRIDE
--如果存在权限问题,执行下面一段脚本
alter database [master] set TRUSTWORTHY on
EXEC sp_changedbowner 'sa'
c.项目->右键->发布->编辑->选择发布数据库
d.点击发布
4.程序发布(方法二):
前两步骤与方法一相同
a.选中数据库->可编程性->程序集->新建程序集
b.执行注册函数的脚本(在发布时选择生成脚本)
GO
CREATE FUNCTION [dbo].[IsMatch]
(@Input NVARCHAR (4000), @Pattern NVARCHAR (4000))
RETURNS BIT
AS
EXTERNAL NAME [Regex].[UserDefinedFunctions].[IsMatch]
GO
CREATE FUNCTION [dbo].[RegexReplace]
(@Input NVARCHAR (4000), @Pattern NVARCHAR (4000), @Replacement NVARCHAR (4000))
RETURNS NVARCHAR (4000)
AS
EXTERNAL NAME [Regex].[UserDefinedFunctions].[RegexReplace]
5.测试使用
select dbo.IsMatch('123abc','\d{2}') --查找连续2位数字
select dbo.IsMatch('123abc','\d{4}') --查找连续4位数字
select dbo.RegexReplace('123abc','\d{3}','ABC') --替换连续3位数字为ABC
结果: