深入解析.Net CLR函數使用舉例
本文介紹.Net CLR,其中講解了在SQL Server 中創建.Net CLR函數的幾個步驟,還有具體的實例等等。
可以在SQL Server 實例中創建可在 Microsoft .NET Framework 公共語言運行時 (CLR) 中創建的程序集中進行編程的數據庫對象。可以充分利用公共語言運行時所提供的豐富的編程模式的數據庫對象包括聚合函數、函數、存儲過程、觸發器以及類型。
在SQL Server 中創建.Net CLR函數分為下列幾個步驟:
使用 .NET Framework 支持的語言將函數定義為類的靜態方法。然后,使用適當的語言編譯器編譯該類,在 .NET Framework 中生成程序集。使用 CREATE ASSEMBLY 語句在 SQL Server 中注冊程序集。通過使用 CREATE FUNCTION 語句創建引用注冊程序集的函數。
注意:
在Microsoft Visual Studio 中部署 SQL Server 項目將在為該項目指定的數據庫中注冊程序集。部署項目時,還會在數據庫中為使用 SqlFunction 屬性注釋的所有方法創建.Net CLR函數。
注意:
默認情況下,關閉 SQL Server 執行.Net CLR代碼的功能。您可以創建、更改和刪除引用托管代碼模塊的數據庫對象,但是除非通過使用 sp_configure (Transact-SQL) 啟用了 clr enabled 選項,否則這些引用將不會在 SQL Server 中執行。
訪問外部資源
可以使用.Net CLR函數訪問外部資源,例如文件、網絡資源、Web 服務及其他數據庫(包括 SQL Server 遠程實例)。這可以通過使用 .NET Framework 中的各種類(例如 System.IO、System.WebServices 及 System.Sql 等)來實現。
至少應將包含此類函數的程序集配置為設置了 EXTERNAL_ACCESS 權限,才能實現此目的。可以使用 SQL 客戶端托管訪問接口訪問 SQL Server 遠程實例。但在.Net CLR函數中不支持與發起服務器的環回連接。
示例如下:
.Net CLR第一步:
.Net CLR第一步
.Net CLR第二步:
- public class Class1
- {
- public static string MySplit(int filedIndex, string filedName)
- {
- //filedIndex從1開始
- try
- {
- if (filedIndex == null || filedIndex <= 0 || filedName == null ||
- filedName == "")
- {
- return "";
- }
- else
- {
- return filedName.Split('|')[filedIndex - 1].Trim();
- }
- }
- catch
- {
- return "";
- }
- }
- }
- //得到程序集 ClassLibrary1.dll
.Net CLR第三步:
- CREATE ASSEMBLY Class1AUTHORIZATION [dbo]FROM
- 'C:\ClassLibrary1.dll'WITH PERMISSION_SET = SAFE
.Net CLR第四步:
- CREATE FUNCTION dbo.MySplit(@filedIndex AS INT,@filedName AS
- NVARCHAR(255))RETURNS NVARCHAR(255)ASEXTERNAL NAME Class1.Class1.MySplit
.Net CLR第五步(測試):
- select dbo.MySplit(2,name) from mytesttable
.Net CLR測試通過!
【編輯推薦】