日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

在SQL Server 2008中调用.net,dll

發(fā)布時(shí)間:2024/4/17 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在SQL Server 2008中调用.net,dll 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

T-SQL的在執(zhí)行普通的查詢的時(shí)候是很高效的,但是在執(zhí)行循環(huán),判斷這樣的語句的時(shí)候效率就不那么的高了。這時(shí)可以借助CLR了,我們可以在SQL Server 2008中擴(kuò)展C#程序來完成循環(huán)等過程式的查詢,或者其他SQL不便實(shí)現(xiàn)的功能。這個(gè)隨筆中將介紹在SQL Server中擴(kuò)展C#程序?qū)崿F(xiàn)正則表達(dá)式的替換功能。

  • 新建一個(gè)類庫程序命名為Regex,打開Visual Studio 2008,點(diǎn)擊File,點(diǎn)擊New,點(diǎn)擊Project,在彈出的New Project對話框中選擇Class Library,項(xiàng)目名稱為Regex。
  • 將項(xiàng)目中的類Class1命名為Regex,在這個(gè)類中寫入如下代碼:
  • 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);
    }
    }
    } 這個(gè)類中使用System.Text.RegularExpressions.Regex類中的Replace函數(shù),這個(gè)在C#是常用的一個(gè)函數(shù),使用正則表達(dá)式實(shí)現(xiàn)替換功能。編譯這個(gè)類庫項(xiàng)目生成RegExp.dll,這個(gè)在后面會用到的。
    • 下面打開SQL Server 2008的管理界面,我們需要把這個(gè)dll部署到數(shù)據(jù)庫中,然后再注冊一個(gè)方法,但是在這之前需要在SQL Server中開啟CLR調(diào)用功能,運(yùn)行下面的SQL 語句:
      exec sp_configure 'clr enabled', 1;
      reconfigure;
    • 運(yùn)行下面的語句從這個(gè)dll中抽取中間語言(IL),如果你自己試驗(yàn),注意修改dll文件存放路徑。
      use AdventureWorks;
      create assembly RegExp from 'D:\MyProject\RegExp\RegExp\bin\Debug\RegExp.dll' 這個(gè)時(shí)候我們就可以在SQL Server中查看這個(gè)集合了,點(diǎn)擊展開數(shù)據(jù)庫AdventureWorks,點(diǎn)擊展開Programmability,點(diǎn)擊展開Assemblies就可以看到Regex,如下圖1。

    圖1
    • 再寫一個(gè)SQL函數(shù)來注冊這個(gè)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 [RegExp].[RegExp.RegExp].[RegexReplace]
      go 注意:
      a. 函數(shù)是returns而不是return,很容易弄錯(cuò)。
      b.with returns null on null input意思是只要調(diào)用函數(shù)的時(shí)候任何一個(gè)參數(shù)為null,函數(shù)返回值將會是null。
      c. 最后一句引用類庫的格式,我本來以為[MyAssemblyName].[MyAssemblyName].[MyMethodName]就可以了,但是需要寫成[MyAssemblyName]. [MyAssemblyName.MyClassName].[MyMethodName]這樣才可以運(yùn)行上面的語句,否則報(bào)錯(cuò)說找不到程序集中相關(guān)的類,至今不解,甚是迷惑。
    • 現(xiàn)在我們就可以像其他的SQL函數(shù)一樣來調(diào)用這個(gè)函數(shù)了,下面舉一些調(diào)用的例子。

    這個(gè)很簡單了,就是將China中的字母z替換成z。

    這個(gè)把運(yùn)算符+替換成add。

    這個(gè)就是那個(gè)語句WITH RETURNS NULL ON NULL INPUT的效果了。

    轉(zhuǎn)載于:https://www.cnblogs.com/lykbk/p/4164447.html

    總結(jié)

    以上是生活随笔為你收集整理的在SQL Server 2008中调用.net,dll的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。