SQL Server 2005 (代號 Yukon) 首度將 .NET Framework Common Language Runtime (CLR) 宿主於資料庫引擎內部,開啟資料庫程式設計新範式。
SQL Server 為高併發、高可靠服務,擁有自主記憶體管理 (Buffer Pool)、排程器 (SOS Scheduler, Fiber 模式)、同步原語。CLR 預設管理機制與之衝突,需深度整合:
| 資源領域 | SQL Server 需求 | CLR 整合方案 (Whidbey Hosting API) |
|---|---|---|
| 記憶體管理 | 完全掌控配置/釋放、緩衝區切換、防分頁 | Host 取代 CRT 配置器、自訂記憶體通知觸發 GC、配置失敗回調策略 |
| 執行緒/排程 | Fiber 模式支援大量併發、非搶佔式排程 | Task 抽象化、Host 控制 Task 生命週期/同步、CLR 線程池由 Host 配置 |
| I/O 完成 | 掌握所有非同步 I/O 狀態 | Host 配置 I/O 完成通知、CLR 透過 Host 發起 I/O |
| 同步原語 | 死鎖偵測、鎖升級、等待統計 | Host 提供 Critical Section, Mutex, Event, RWLock, Monitor 實作 |
| Managed/Unmanaged 轉換 | P/Invoke 呼叫非受控碼時的纖程切換 | Task 狀態轉換通知、非受控程式碼區塊標記 |
TRUSTWORTHY ON 或簽署非對稱金鑰登入。-- 1. 啟用 CLR (伺服器層級)
EXEC sp_configure 'clr enabled', 1; RECONFIGURE;
-- 2. 建立組件 (需 VARBINARY 或 FROM 路徑)
CREATE ASSEMBLY MyUtils FROM 'C:\Dll\MyUtils.dll' WITH PERMISSION_SET = SAFE;
-- 3. 建立托管物件對應
CREATE PROCEDURE usp_CalcHash @input NVARCHAR(MAX)
AS EXTERNAL NAME MyUtils.[MyNamespace.MyClass].CalcHash;