参考文章

MSSQLSERVER接入c#clr程序集,使c#函数变sql函数

正则表达式30分钟入门教程

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

 结果:

 

posted on 2017-07-05 10:54  lazyneal  阅读(678)  评论(0编辑  收藏  举报