正则表达式学习之调用CLR函数执行正则查询(2)

MatchCollection mc = re.Matches(text_input);

foreach(Match mt in mc)

{

//mt.Value

}

二,创建CLR工程


我使用的IDE版本是VS2017 Enterprise,要创建CLR工程,首先需要创建SQL Server 类型的 Project。

1,新建CLR函数

在已创建的SQL Server Project中添加新项目(Add -> New Item),选项SQL CLR C# User Defined Function,这里把文件命名为UserDefinedFunctions.cs。

2,编写CLR代码

完整的CLR标量函数示例代码如下,Build 该文件,生成DLL文件,用该DLL文件创建程序集。

为了使用正则表达式,需要在文件中添加引用 : using System.Text.RegularExpressions;

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

using System.Text;

using System.Text.RegularExpressions;

public partial class UserDefinedFunctions

{

[Microsoft.SqlServer.Server.SqlFunction]

public static SqlString Match(string input, string pattern)

{

string str = Regex.Match(input, pattern, RegexOptions.IgnoreCase).Value;

return new SqlString (str);

}

public static SqlBoolean IsMatch(string input, string pattern)

{

bool match = Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase);

return new SqlBoolean(match);

}

public static SqlString Matches(string input, string pattern)

{

MatchCollection mc = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);

StringBuilder strList = new StringBuilder();

int idx = 0;

foreach(Match m in mc)

{

strList.Append(string.Format(“\“idx{0}\”:\”{1}\“,”, idx, m.Value));

idx = idx + 1;

}

return new SqlString(strList.ToString());

}

public static SqlString SplitItem(string input, string separator, int idx)

{

string[] str = input.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries);

return str.Length> idx ? str[idx] : “”;

}

public static string GetJsonItem(string input, string key)

{

string pattern = string.Format(“(?<=\”{0}\“:\”).*?(?=\“)”, key);

return Regex.Match(input, pattern, RegexOptions.IgnoreCase).Value;

}

}

三,在SQL Server中创建CLR函数


要在SQL Server数据库中创建CLR函数,必须配置SQL Server的选项,然后使用DLL文件创建Assembly,并从Assembly创建SQL 函数。

实现的目标是:我们的本地项目发起一个git提交后,剩下的单元测试, 打包构建,代码部署,邮件提醒等,我们会全部自动化完成部署。

3.1. 准备

首先我们随便准备一个项目(我这边是使用webpack搭建的vue项目了),在git仓库中新建一个项目,然后把该本地项目提交到github上去。

比如我这边项目如下所示:

1,配置SQL Server的选项

为了把CLR工程部署到SQL Server数据库中,需要配置数据库的高级选项,主要是禁用clr strict security 和启用clr enabled选项。

$ sudo vim /var/lib/jenkins/secrets/initialAdminPassword

然后复制密码后填写上去,继续执行下面的步骤即可。

这个过程可能会加载很慢,我们稍等一下后,我们按照默认配置安装插件即可,如下所示:

2,创建程序集

引用CLR Project生成的DLL文件,用该DLL文件来创建SQL Server程序集:

CREATE ASSEMBLY [SQLServerDatabase]

FROM ‘E:\clr_project_path.dll’

WITH PERMISSION_SET = SAFE

GO

3,从程序集中创建SQL函数

把SQL Server Database Project中的创建的函数,逐个创建为SQL函数。

CREATE FUNCTION [dbo].[Match](@input [nvarchar](max), @pattern [nvarchar](max))

RETURNS [nvarchar](max) WITH EXECUTE AS CALLER

AS

EXTERNAL NAME [SQLServerDatabase].[UserDefinedFunctions].[Match]

GO

CREATE FUNCTION [dbo].[IsMatch](@input [nvarchar](max), @pattern [nvarchar](max))

RETURNS bit WITH EXECUTE AS CALLER

AS

EXTERNAL NAME [SQLServerDatabase].[UserDefinedFunctions].[IsMatch]

GO

最后

给大家送一个小福利

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

AS

EXTERNAL NAME [SQLServerDatabase].[UserDefinedFunctions].[IsMatch]

GO

最后

给大家送一个小福利

[外链图片转存中…(img-2gbVKrzZ-1714733809110)]

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

[外链图片转存中…(img-N8vlSysr-1714733809111)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值