T-SQL的在執(zhí)行普通的查詢的時候是很高效的,但是在執(zhí)行循環(huán),判斷這樣的語句的時候效率就不那么的高了。這時可以借助CLR了,我們可以在SQL Server 2008中擴展C#程序來完成循環(huán)等過程式的查詢,或者其他SQL不便實現(xiàn)的功能。這個隨筆中將介紹在SQL Server中擴展C#程序?qū)崿F(xiàn)正則表達(dá)式的替換功能。
- 新建一個類庫程序命名為Regex,打開Visual Studio 2008,點擊File,點擊New,點擊Project,在彈出的New Project對話框中選擇Class Library,項目名稱為Regex。
- 將項目中的類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);
}
}
}
exec sp_configure ' clr enabled ' , 1 ;
reconfigure ;
use AdventureWorks;
create assembly RegExp from ' D:\MyProject\RegExp\RegExp\bin\Debug\RegExp.dll '
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,很容易弄錯。
b.with returns null on null input意思是只要調(diào)用函數(shù)的時候任何一個參數(shù)為null,函數(shù)返回值將會是null。
c. 最后一句引用類庫的格式,我本來以為[MyAssemblyName].[MyAssemblyName].[MyMethodName]就可以了,但是需要寫成[MyAssemblyName]. [MyAssemblyName.MyClassName].[MyMethodName]這樣才可以運行上面的語句,否則報錯說找不到程序集中相關(guān)的類,至今不解,甚是迷惑。
這個很簡單了,就是將China中的字母z替換成z。
這個就是那個語句WITH RETURNS NULL ON NULL INPUT的效果了。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
