在SQL Server 2008中调用.net,dll
生活随笔
收集整理的這篇文章主要介紹了
在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á)式的替換功能。
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。
- 再寫一個(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è)就是那個(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [整理]Git使用文章整理
- 下一篇: SQL中EXISTS的用法(转)