CLR SQL SERVER:让正则表达式也加入你的Transaction-SQL

试过Transaction-Sql编程的哥们应该都觉的这东西太恶心了,除了IDE,最恶心得还数编程中涉及的字符 串拼接问题。想象一下:在一个巨复杂的业务逻辑中,里面充满了while,if,case。你必须处理好所有的情 况并按某一规则来拼接字符串。这些字符串可能是Sql,也可能是结果,但不管是什么都是我们的噩梦。

正则表达式是啥相信就不要我介绍了,处理文本的利器呀。虽然Sql Server也支持正则表达式,但使 用比较麻烦,还是自己制作一个正则表达函数来的方便。这节主要涉及了CLR Sql Server技术,该技术是从 Sql Server 2005时被提出来的,就目前来看是个比较成熟的技术。现在我们就来DIY自己的正则函数吧!

程序代码

/*引用程序集*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;  

using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Text.RegularExpressions;
using System.Xml.Linq;
using System.Xml;
using System.IO;
using System.Collections;  

<p> public class CLR_FUNCTION
    {
        public CLR_FUNCTION() { }
        /// 作者:GhostBear
        /// 博客地址: http://blog.csdn.net/ghostbear
        /// 表值函数,通过正则表达式来将对象进行拆分()。拆分结果以行记录的形式输出。
        /// 例:
        ///   需要拆分的数据:1,2,3,4,5,12,8
        ///   进行拆分的正则表达式:\d{1,2}
        ///   输出的结果:
        ///   1
        ///   2
        ///   3
        ///   4
        ///   5
        ///   12
        ///   8
        /// </summary>
        /// <param name="input">需要拆分的数据</param>
        /// <param name="pattern">用来拆分的正则表达式</param>
        /// <returns>拆分后的记录</returns>
        [SqlFunction(TableDefinition="tmp_value nvarchar(max)",FillRowMethodName="SplictByRegex_FillRow")]
        public static IEnumerable SPLICT_STR_BY_REGEX_1(SqlString input, SqlString pattern)
        {
            IList<string> result2 = new List<string>();
            var matches = Regex.Matches(input.ToString().Trim(), pattern.ToString().Trim

());</p><p>            foreach (Match m in matches)
            {
                if (m.Success)
                {
                    result2.Add(m.Value);
                }
            }</p><p>            return result2.AsEnumerable();
        }</p><p>        public static void SplictByRegex_FillRow(object obj, out SqlString tmp)
        {
            tmp = new SqlString(obj.ToString());
        }</p>  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正则表达式
, 函数
, server
, 拆分拼接
, using
, system
, public
sql正则表达式
sqlserver clr、sql server clr、sqlclr、clr sql server 2012、sql server 2008 clr,以便于您获取更多的相关知识。

时间: 2024-08-31 20:23:50

CLR SQL SERVER:让正则表达式也加入你的Transaction-SQL的相关文章

《SQL Server企业级平台管理实践》读书笔记——SQL Server中数据文件空间使用与管理

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server中数据文件空间使用与管理 1.表和索引存储结构 在SQL Server2005以前,一个表格是以一个B树或者一个堆(heap)存放的.每个B树或者堆,在sysindexes里面都有一条记录相对应.SQL Server2005以后,引入了分区表的概念(Table Partition),在存储组织上,现有的分区基本上替代了原来表格的概念,原先表的概念成为了一个逻辑概念.一个分区就是一个B树或者一个堆.而一张表格则是一个

《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server数据库文件分配方式 1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL Server存储在一些系统视图里的空间使用统计信息计算出的结果,如果没有更新空间统计信息,比如刚刚发生大数据插入,sp_spaceused的结果就不准确.3.这个命令主要是针对普通用户的数据库,对

sql server-C# 程序访问本地SQL SERVER数据库 没有问题,但无法访问远程SQL SERVER数据库

问题描述 C# 程序访问本地SQL SERVER数据库 没有问题,但无法访问远程SQL SERVER数据库 C# 程序访问本地SQL SERVER 没有问题,但无法访问远程SQL SERVER 报错 (Failed to load resource: the server responded with a status of 404 (Not Found))未能加载资源:服务器回应状态404(未找到) ----之前都能远程连接SQL SERVER 但不知为什么突然就报这样的错,这是什么异常原因导

Unofficial Microsoft SQL Server Driver for PHP (sqlsrv)非官方的PHP SQL Server 驱动

原文 Unofficial Microsoft SQL Server Driver for PHP (sqlsrv) Here are unofficial modified builds of Microsoft's sqlsrv and pdo_sqlsrv drivers for PHP, version 3.0, for: PHP 5.6 for Windows Vista/2008 and above (32 and 64 bit)  PHP 5.5 for Windows Vista

《SQL Server企业级平台管理实践》读书笔记——SQL Server中收缩数据库不好用的原因

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server中收缩数据库不好用的原因 数据库管理员有时候需要控制文件的大小,可能选择收缩文件,或者把某些数据文件情况以便从数据库里删除. 这时候我们就要使用到DBCC SHRINKFILE命令,此命令的脚本为: DBCC SHRINKFILE ( { file_name | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATE

《数据库基础及实践技术——SQL Server 2008》一2.4 卸载SQL Server 2008

2.4 卸载SQL Server 2008 如果要卸载SQL Server 2008,必须首先停止SQL Server 2008的全部服务(如果已经启动的话),然后再执行卸载操作. 停止SQL Server 2008服务的方法如下: 在SQL Server配置管理器中,单击左侧的"SQL Server服务",窗口右侧将列出已安装的SQL Server服务.在要停止的服务上右击鼠标,在弹出的快捷菜单中选择"停止"命令,即可停止选中的服务. SQL Server 200

《数据库基础及实践技术——SQL Server 2008》一2.3 配置SQL Server 2008

2.3 配置SQL Server 2008 成功安装好SQL Server 2008后,根据需要可以对SQL Server 2008的服务器端和客户端进行适当的配置,以更符合用户的要求.本节介绍使用配置管理器工具配置SQL Server 2008的方法. SQL Server配置管理器(SQL Server Configuration Manager)综合了服务管理器.服务器网络实用工具和客户端网络实用工具的功能. 单击"开始"→"Microsoft SQL Server 2

[SQL Server]一次执行资料夹内的.sql 指令码

原文:[SQL Server]一次执行资料夹内的.sql 指令码 初始资料库时,我们Developers们会准备很多.sql指令码来建立资料表.检视甚至初始资料,那麽要怎麽一次执行资料夹内的*.sql或是指定的几个.sql指令码? 来节省一点点初始化资料库的作业时间.   好在我们有MSDN使用sqlcmd 执行指令码的范例: sqlcmd -S myServer\instanceName -i C:\myScript.sql 如果只有几个,串成bat档或是powershell也很方便,但如果很

《SQL Server企业级平台管理实践》读书笔记——SQL Server如何设置自动增长和自动收缩项

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server如何设置自动增长和自动收缩项 SQL Server允许用户设置数据库初始值和最大值,可以通过自动增长或者自动收缩进行配置.通过这些配置,我们可以防止数据库空间问题而导致的应用程序修改失败或者SQL Server磁盘空间耗尽的事情发生.一般来讲,如果数据库不是很忙,默认的设置为自动增长,这种方式能够满足大部分的需求.但是在大量并发的情况下,申请数据文件和日志文件增长本身是一件非常消耗系统资源和影响性能的工作.所以如果

Sql Server CPU 性能排查及优化的相关 Sql

Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使用CPU资源最多的语句.例如下面的语句就可以列出前50名.select c.last_execution_time,c.execution_count,c.total_logical_reads,c.total_logical_writes,c.total_elapsed_time,c.last_e