CREATE ASSEMBLY 註冊組件。CREATE FUNCTION 建立對應的 T-SQL 函數。注意:預設關閉 CLR 執行,需執行 sp_configure 'clr enabled', 1; RECONFIGURE; 啟用。
public class Class1
{
public static string MySplit(int filedIndex, string filedName)
{
if (filedIndex == null || filedIndex <= 0 || string.IsNullOrEmpty(filedName))
return "";
try { return filedName.Split('|')[filedIndex - 1].Trim(); }
catch { return ""; }
}
}
編譯產生 ClassLibrary1.dll。
CREATE ASSEMBLY Class1 AUTHORIZATION [dbo] FROM 'C:\ClassLibrary1.dll' WITH PERMISSION_SET = SAFE;
CREATE FUNCTION dbo.MySplit
(
@filedIndex AS INT,
@filedName AS NVARCHAR(255)
)
RETURNS NVARCHAR(255)
AS EXTERNAL NAME Class1.Class1.MySplit;
EXTERNAL NAME 格式:AssemblyName.ClassName.MethodName。SELECT dbo.MySplit(2, name) FROM mytesttable;
測試通過,成功回傳第二欄位內容。
若函數需存取檔案、網路、Web Service、其他資料庫,組件需設定 EXTERNAL_ACCESS 或 UNSAFE 權限,並使用 System.IO、System.Web.Services 等類別。不支援對發起伺服器的 Loopback 連線。