数据库索引高频面试题:正则表达式学习之调用CLR函数执行正则查询(1)

Regex re = new Regex("(?<=\"UserID\":\").*?(?=\")", RegexOptions.IgnoreCase);

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。



?![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvNjI4MDg0LzIwMTkxMS82MjgwODQtMjAxOTExMjgxNDIwMTMwODktMjI5NzY3NTQzLnBuZw?x-oss-process=image/format,png)



**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




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



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



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvNTYxNzk0LzIwMTkxMS81NjE3OTQtMjAxOTExMjgxMzQxMzkwMDYtMTQyNjA5ODk3My5wbmc?x-oss-process=image/format,png)![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvNTYxNzk0LzIwMTkxMS81NjE3OTQtMjAxOTExMjgxMzQxMzkwMDYtMTQyNjA5ODk3My5wbmc?x-oss-process=image/format,png)



**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

最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

想获取个人高清面试题的可以戳这里免费领取及个人也准备了很多面试题含答案的资料供你刷!

  • Java核心知识整理

数据库索引高频面试题:正则表达式学习之调用CLR函数执行正则查询(1)

Java核心知识

  • Spring全家桶(实战系列)

数据库索引高频面试题:正则表达式学习之调用CLR函数执行正则查询(1)

  • 其他电子书资料

数据库索引高频面试题:正则表达式学习之调用CLR函数执行正则查询(1)

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

数据库索引高频面试题:正则表达式学习之调用CLR函数执行正则查询(1)

上一篇:Nutch源码


下一篇:Spring AOP