//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
CREATE FUNCTION [dbo].[Matches](@input [nvarchar](max), @pattern [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
最后
做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
[外链图片转存中…(img-IdKogKAh-1714733785115)]
[外链图片转存中…(img-L43Gfulq-1714733785116)]
[外链图片转存中…(img-o4xFeTPz-1714733785116)]
[外链图片转存中…(img-iDjXwt2D-1714733785117)]