SQL点滴15—在SQL Server 2008中调用C#程序

简介:    T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了。这时可以借助CLR了,我们可以在SQL Server 2008中扩展C#程序来完成循环等过程式的查询,或者其他SQL不便实现的功能。

  

T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了。这时可以借助CLR了,我们可以在SQL Server 2008中扩展C#程序来完成循环等过程式的查询,或者其他SQL不便实现的功能。这个随笔中将介绍在SQL Server中扩展C#程序实现正则表达式的替换功能。

  1. 新建一个类库程序命名为Regex,打开Visual Studio 2008,点击File,点击New,点击Project,在弹出的New Project对话框中选择Class Library,项目名称为Regex。
  2. 将项目中的类Class1命名为Regex,在这个类中写入如下代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlTypes;
    using System.Text.RegularExpressions;
    using Microsoft.SqlServer.Server;
    namespace RegExp
    {
    public partial class RegExp
    {
    [SqlFunction(IsDeterministic
    = true , DataAccess = DataAccessKind.None)]
    public static SqlString RegexReplace(
    SqlString input, SqlString pattern, SqlString replacement)
    {
    return (SqlString)Regex.Replace(
    input.Value, pattern.Value, replacement.Value);
    }
    }
    }

    这个类中使用System.Text.RegularExpressions.Regex类中的Replace函数,这个在C#是常用的一个函数,使用正则表达式实现替换功能。编译这个类库项目生成RegExp.dll,这个在后面会用到的。
  3. 下面打开SQL Server 2008的管理界面,我们需要把这个dll部署到数据库中,然后再注册一个方法,但是在这之前需要在SQL Server中开启CLR调用功能,运行下面的SQL 语句:
    exec sp_configure ' clr enabled ' , 1 ;
    reconfigure ;
  4. 运行下面的语句从这个dll中抽取中间语言(IL),如果你自己试验,注意修改dll文件存放路径。
    use AdventureWorks;
    create assembly RegExp from ' D:\MyProject\RegExp\RegExp\bin\Debug\RegExp.dll '
    这个时候我们就可以在SQL Server中查看这个集合了,点击展开数据库AdventureWorks,点击展开Programmability,点击展开Assemblies就可以看到Regex,如下图1。

    图1
  5. 再写一个SQL函数来注册这个Assembly,代码如下
    create function dbo.RegexReplace(  

    @input as nvarchar(max),

    @pattern as nvarchar(max),

    @replacement as nvarchar(max))

    returns nvarchar(max)

    with returns null on null input

    external name [RegExp].[RegExp.RegExp].[RegexReplace]

    go
     
    多谢【青蛙王子】提醒,已经更正
    注意:

    a. 函数是returns而不是return,很容易弄错。
    b.with returns null on null input意思是只要调用函数的时候任何一个参数为null,函数返回值将会是null。
    c. 最后一句引用类库的格式,我本来以为[MyAssemblyName].[MyAssemblyName].[MyMethodName]就可以了,但是需要写成[MyAssemblyName]. [MyAssemblyName.MyClassName].[MyMethodName]这样才可以运行上面的语句,否则报错说找不到程序集中相关的类,至今不解,甚是迷惑。
  6. 现在我们就可以像其他的SQL函数一样来调用这个函数了,下面举一些调用的例子。

    这个很简单了,就是将China中的字母z替换成z。

    这个把运算符+替换成add。

    这个就是那个语句WITH RETURNS NULL ON NULL INPUT的效果了。

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
9月前
|
SQL Web App开发 安全
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
714 2
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
|
8月前
|
SQL Web App开发 安全
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
493 0
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
|
9月前
|
SQL 容灾 安全
云时代SQL Server的终极答案:阿里云 RDS SQL Server如何用异地容灾重构系统可靠性
在数字化转型的浪潮中,数据库的高可用性已成为系统稳定性的生命线。作为经历过多次生产事故的资深开发者,肯定深知传统自建SQL Server架构的脆弱性——直到遇见阿里云 RDS SQL Server,其革命性的异地容灾架构彻底改写了游戏规则。
|
10月前
|
SQL Web App开发 安全
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
955 0
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
928 2
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
835 11
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
1006 13
|
SQL 安全 网络安全
SQL安装程序规则错误解决方案
在安装SQL Server时,遇到安装程序规则错误是一个比较常见的问题
1073 5
|
SQL 安全 Windows
SQL安装程序规则错误解析与解决方案
在安装SQL Server时,用户可能会遇到安装程序规则错误的问题,这些错误通常与系统配置、权限设置、依赖项缺失或版本不兼容等因素有关
1288 2
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
1700 0