CLR函數(shù)實(shí)現(xiàn)字符串排序七步通
下面我們來(lái)給大家編寫(xiě)一個(gè)簡(jiǎn)短的CLR函數(shù),來(lái)實(shí)現(xiàn)SQL Server 2005的功能。接下來(lái)讓我們來(lái)看看CLR函數(shù)具體是如何實(shí)現(xiàn)這一功能的,希望可以給大家?guī)?lái)幫助。
步驟1:?jiǎn)⒂肅LR集成
首先需要在SQL Server外圍應(yīng)用配置器中進(jìn)行設(shè)置,確保SQL Server已經(jīng)啟用了CLR。如圖1所示:
選擇“功能的外圍應(yīng)用配置器”,顯示如圖2所示界面:
確保“啟用CLR集成”這一項(xiàng)打勾,然后點(diǎn)“確定”按鈕。
步驟2:編寫(xiě)CLR代碼
首先,我們需要做的是編寫(xiě)CLR代碼。采用VB.NET或者C#來(lái)寫(xiě)都可以,在這個(gè)例子中我們將使用VB.NET 。
下面的范例代碼中,創(chuàng)建了一個(gè)名為CLRFunctions的類,該類中包含了一個(gè)名為SortString的函數(shù)。SortString函數(shù)對(duì)輸入的一個(gè)字符串變量進(jìn)行排序,并返回一個(gè)排序后的字符串。
第一步:使用內(nèi)置的VB函數(shù),把 “,”作為分隔符分割輸入的字符串,得到一個(gè)字符串?dāng)?shù)組;
第二步:采用Array.Sort,對(duì)數(shù)組中的數(shù)據(jù)進(jìn)行排序列。這一部如果采用T-SQL來(lái)寫(xiě)的話,更為簡(jiǎn)單。
將代碼保存到SQLServerCLRSortString.vb文件中。
- Public Class CLRFunctions
- Public Shared Function SortString(ByVal Name As String) As String
- Dim i As Integer
- Dim returnValue As String
- Dim stringArray() As String
- ' 分割字符串,得到數(shù)組
- stringArray = Split(Name, ",")
- ' 對(duì)數(shù)組進(jìn)行排序
- Array.Sort(stringArray)
- '初始化返回值字符串
- returnValue = ""
- For i = LBound(stringArray) To UBound(stringArray)
- returnValuereturnValue = returnValue & stringArray(i) & ","
- Next i
- Return returnValue
- End Function
- End Class
步驟3:編譯CLR代碼
為了使用此代碼,需要先對(duì)代碼進(jìn)行編譯。在命令行狀態(tài)下,可以使用vbc.exe應(yīng)用程序來(lái)編譯代碼。具體命令如下所示:
- C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc /target:library C:\SQLServerCLRSortString.vb
vbc.exe應(yīng)用程序,在.NET 2.0框架目錄中可以找到,不同的服務(wù)器或桌面因安裝路徑不同可能會(huì)有差異。編譯成功后,將得到C:\SQLServerCLRSortString.dll這個(gè)DLL文件。把DLL拷貝到我們的SQL Server機(jī)器上
步驟4:在SQL Server中注冊(cè)DLL
代碼編譯通過(guò)后,您需要與SQL Server中注冊(cè)DLL。要實(shí)現(xiàn)到這一目的,可以在要使用該函數(shù)的數(shù)據(jù)庫(kù)中能運(yùn)行這些命令。注冊(cè)的目的,就是將外部創(chuàng)建的DLL與SQL Server內(nèi)部對(duì)象進(jìn)行綁定,這樣外部DLL中的函數(shù)就可以和SQL Server中的正常函數(shù)一樣進(jìn)行調(diào)用了。
在下面的函數(shù)中,我們可以看到引用CLRFunctions.CLRFunctions.SortString由三個(gè)部分組成:
- *CLRFunctions – 裝配引用
- *CLRFunctions – VB.net 代碼中所引用的類名
- *SortString – VB.net代碼中所引用的函數(shù)
- CREATE ASSEMBLY CLRFunctions FROM 'C:\SQLServerCLRSortString.dll'
- GO
- CREATE FUNCTION dbo.SortString
- (
- @name AS NVARCHAR(255)
- )
- RETURNS NVARCHAR(255)
- AS EXTERNAL NAME CLRFunctions.CLRFunctions.SortString
- GO
步驟5:創(chuàng)建測(cè)試用的數(shù)據(jù)表和數(shù)據(jù)
可以創(chuàng)建一個(gè)示例表和一些測(cè)試數(shù)據(jù),來(lái)檢驗(yàn)一下,具體代碼如下所示:
- CREATE TABLE testSort (data VARCHAR(255))
- GO
- INSERT INTO testSort VALUES('apple,pear,orange,banana,grape,kiwi')
- INSERT INTO testSort VALUES('pineapple,grape,banana,apple')
- INSERT INTO testSort VALUES('apricot,pear,strawberry,banana')
- INSERT INTO testSort VALUES('cherry,watermelon,orange,melon,grape')
步驟6:測(cè)試
如果要測(cè)試CLR函數(shù),在步驟4執(zhí)行后示例表和數(shù)據(jù)創(chuàng)建完之后,可以運(yùn)行下面的SELECT語(yǔ)句,分別列出排序前和排序后的數(shù)據(jù),兩者便于對(duì)比。
- SELECT data, dbo.sortString(data) as sorted FROM testSort
步驟7:刪除CLR函數(shù)
如果希望徹底刪除CLR函數(shù),您需要將之前創(chuàng)建的VB文件以及編譯過(guò)程中產(chǎn)生的DLL都刪除。
運(yùn)行下面的T-SQL代碼可以刪除之前創(chuàng)建的對(duì)象。
快試試吧,很簡(jiǎn)單的!
- DROP FUNCTION dbo.SortString
- GO
- DROP ASSEMBLY CLRFunctions
- GO
- DROP TABLE testSort
- GO
【編輯推薦】