sqlserver 执行正则表达式,调用c# 函数、代码
2015-06-25 15:40
501 查看
--1.新建SqlServerExt项目,编写 C# 方法生成 SqlServerExt.dll 文件
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
namespace Ext
{
public static partial class DataBase
{
/// <summary>
/// 正则表达式
/// </summary>
/// <param name="input">输入字符</param>
/// <param name="pattern">正则表达式</param>
/// <returns></returns>
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean Regex(SqlChars input, SqlString pattern)
{
try
{
Regex regex = new Regex(pattern.Value);
return new SqlBoolean(regex.IsMatch(new string(input.Value)));
}
catch
{
return new SqlBoolean(false);
}
}
}
}
--2.在SqlServer 中注册程序集
CREATE ASSEMBLY Udf
FROM 'D:\.......\SqlServerExt.dll'
WITH PERMISSION_SET = SAFE;
--2.1 删除已注册的程序集 Udf
--DROP ASSEMBLY Udf;
--3.创建一个sql 函数
CREATE FUNCTION Regex
(
@input NVARCHAR(4000) ,
@pattern nvarchar(4000)
)
RETURNS bit
AS
EXTERNAL NAME [Udf].[Ext.DataBase].[Regex] ;
--EXTERNAL NAME [Sql中程序集名].[C#命名空间.C#类名].[C#方法名]
--3.1 删除函数
--DROP FUNCTION Regex;
--4.测试正则
--4.1 匹配所有数字
select dbo.regex('123asd123','^\d+$');
select dbo.regex('123000123','^\d+$');
--4.2 查询mytable表中mycol字段中,包含所有数字的记录
select top 10 * from [mytable] where dbo.regex([mycol],'^\d+$');
--5.执行 自定义函数异常时
--消息 6263,级别 16,状态 1,第 2 行
--禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项。
/*
--出现如下提示时,执行下方代码
--消息 6263,级别 16,状态 1,第 2 行
--禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项。
exec sp_configure 'show advanced options', '1';
go
reconfigure;
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go
*/
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
namespace Ext
{
public static partial class DataBase
{
/// <summary>
/// 正则表达式
/// </summary>
/// <param name="input">输入字符</param>
/// <param name="pattern">正则表达式</param>
/// <returns></returns>
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean Regex(SqlChars input, SqlString pattern)
{
try
{
Regex regex = new Regex(pattern.Value);
return new SqlBoolean(regex.IsMatch(new string(input.Value)));
}
catch
{
return new SqlBoolean(false);
}
}
}
}
--2.在SqlServer 中注册程序集
CREATE ASSEMBLY Udf
FROM 'D:\.......\SqlServerExt.dll'
WITH PERMISSION_SET = SAFE;
--2.1 删除已注册的程序集 Udf
--DROP ASSEMBLY Udf;
--3.创建一个sql 函数
CREATE FUNCTION Regex
(
@input NVARCHAR(4000) ,
@pattern nvarchar(4000)
)
RETURNS bit
AS
EXTERNAL NAME [Udf].[Ext.DataBase].[Regex] ;
--EXTERNAL NAME [Sql中程序集名].[C#命名空间.C#类名].[C#方法名]
--3.1 删除函数
--DROP FUNCTION Regex;
--4.测试正则
--4.1 匹配所有数字
select dbo.regex('123asd123','^\d+$');
select dbo.regex('123000123','^\d+$');
--4.2 查询mytable表中mycol字段中,包含所有数字的记录
select top 10 * from [mytable] where dbo.regex([mycol],'^\d+$');
--5.执行 自定义函数异常时
--消息 6263,级别 16,状态 1,第 2 行
--禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项。
/*
--出现如下提示时,执行下方代码
--消息 6263,级别 16,状态 1,第 2 行
--禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项。
exec sp_configure 'show advanced options', '1';
go
reconfigure;
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go
*/
相关文章推荐
- Mysql数据库主主互备
- MongoDB入门篇--增删改查
- Oracle 密码过去解决方法
- Oracle 忘记sys或者system密码解决方法
- sql server 2008 性能优化
- oracle查找重复记录
- mongodb3.1.3安全认证
- Lua: 给 Redis 用户的入门指导
- oracle 进阶(二) oracle 其他数据库对象
- mysql B-tree和hash索引性能测试对比
- 新手Oracle安装及使用入门
- SQL 入门笔记
- MySQL中distinct及group by的一些用法
- ORACLE RMAN增量备份经典理解
- MySQL中distinct及group by的一些用法
- 黄聪:Mysql数据库还原备份提示MySQL server has gone away 的解决方法(备份文件数据过大)
- Ubuntu下安装Mysql小结
- UDEV SCSI Rules Configuration for ASM in Oracle Linux 5 and 6
- oracle恢复数据库数据到一个点
- powerdesigner 连接 oracle