usp_ReadTextFile)usp_ReadTextFile.cs)[SqlProcedure] 屬性using 陳述式(Microsoft.SqlServer.Server, System.Data.SqlClient 等)
圖 11 - 自動產生的 SQL Server CLR 預存程序類別
using System;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
public partial class StoredProcedures
{
[SqlProcedure]
public static void usp_ReadTextFile(string filePath)
{
// 實作檔案讀取邏輯
using (StreamReader sr = new StreamReader(filePath))
{
string line;
while ((line = sr.ReadLine()) != null)
{
SqlContext.Pipe.Send(line); // 直接輸出至用戶端
}
}
}
}

圖 12 - 建置 SQL Server CLR 預存程序
EXEC sp_configure 'clr enabled', 1; RECONFIGURE;CREATE ASSEMBLY MyAssembly FROM 'C:\Path\MyAssembly.dll' WITH PERMISSION_SET = SAFE;CREATE PROCEDURE usp_ReadTextFile @filePath NVARCHAR(260) AS EXTERNAL NAME MyAssembly.[StoredProcedures].usp_ReadTextFileGRANT EXECUTE ON usp_ReadTextFile TO [User/Role];| 優勢 | 說明 |
|---|---|
| 程式語言完整功能 | C#/VB.NET 完整類別庫、例外處理、多執行緒、正則運算式 |
| 計算密集型任務 | 加密、壓縮、科學計算、圖像處理比 T-SQL 快數量級 |
| 外部資源存取 | 檔案系統、Web Service、登錄、網路通訊 |
| 程式碼重用 | 共用業務邏輯組件、單元測試、版本控管 |
| 型別安全 | 編譯期檢查、IntelliSense、重構支援 |
| 權限集 | 適用場景 | 限制 |
|---|---|---|
| SAFE(預設) | 純計算、字串處理、邏輯運算 | 無外部存取、無非受控代碼 |
| EXTERNAL_ACCESS | 檔案、網路、登錄、Web Service | 需資料庫擁有者權限、TRUSTWORTHY |
| UNSAFE | 非受控 API、記憶體直接操作、COM 互通 | 需 sysadmin、極高風險,生產環境慎用 |