CLR函數實現字符串排序七步通
下面我們來給大家編寫一個簡短的CLR函數,來實現SQL Server 2005的功能。接下來讓我們來看看CLR函數具體是如何實現這一功能的,希望可以給大家帶來幫助。
步驟1:啟用CLR集成
首先需要在SQL Server外圍應用配置器中進行設置,確保SQL Server已經啟用了CLR。如圖1所示:
選擇“功能的外圍應用配置器”,顯示如圖2所示界面:
確?!皢⒂肅LR集成”這一項打勾,然后點“確定”按鈕。
步驟2:編寫CLR代碼
首先,我們需要做的是編寫CLR代碼。采用VB.NET或者C#來寫都可以,在這個例子中我們將使用VB.NET 。
下面的范例代碼中,創建了一個名為CLRFunctions的類,該類中包含了一個名為SortString的函數。SortString函數對輸入的一個字符串變量進行排序,并返回一個排序后的字符串。
第一步:使用內置的VB函數,把 “,”作為分隔符分割輸入的字符串,得到一個字符串數組;
第二步:采用Array.Sort,對數組中的數據進行排序列。這一部如果采用T-SQL來寫的話,更為簡單。
將代碼保存到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
- ' 分割字符串,得到數組
- stringArray = Split(Name, ",")
- ' 對數組進行排序
- 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代碼
為了使用此代碼,需要先對代碼進行編譯。在命令行狀態下,可以使用vbc.exe應用程序來編譯代碼。具體命令如下所示:
- C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc /target:library C:\SQLServerCLRSortString.vb
vbc.exe應用程序,在.NET 2.0框架目錄中可以找到,不同的服務器或桌面因安裝路徑不同可能會有差異。編譯成功后,將得到C:\SQLServerCLRSortString.dll這個DLL文件。把DLL拷貝到我們的SQL Server機器上
步驟4:在SQL Server中注冊DLL
代碼編譯通過后,您需要與SQL Server中注冊DLL。要實現到這一目的,可以在要使用該函數的數據庫中能運行這些命令。注冊的目的,就是將外部創建的DLL與SQL Server內部對象進行綁定,這樣外部DLL中的函數就可以和SQL Server中的正常函數一樣進行調用了。
在下面的函數中,我們可以看到引用CLRFunctions.CLRFunctions.SortString由三個部分組成:
- *CLRFunctions – 裝配引用
- *CLRFunctions – VB.net 代碼中所引用的類名
- *SortString – VB.net代碼中所引用的函數
- 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:創建測試用的數據表和數據
可以創建一個示例表和一些測試數據,來檢驗一下,具體代碼如下所示:
- 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:測試
如果要測試CLR函數,在步驟4執行后示例表和數據創建完之后,可以運行下面的SELECT語句,分別列出排序前和排序后的數據,兩者便于對比。
- SELECT data, dbo.sortString(data) as sorted FROM testSort
步驟7:刪除CLR函數
如果希望徹底刪除CLR函數,您需要將之前創建的VB文件以及編譯過程中產生的DLL都刪除。
運行下面的T-SQL代碼可以刪除之前創建的對象。
快試試吧,很簡單的!
- DROP FUNCTION dbo.SortString
- GO
- DROP ASSEMBLY CLRFunctions
- GO
- DROP TABLE testSort
- GO
【編輯推薦】