SQL Server 2005 整合 .NET Framework Common Language Runtime (CLR),讓資料庫開發者能以 C#、VB.NET 等第一類語言撰寫預存程序、函數、觸發器、使用者定義型別 (UDT) 與彙總 (UDA)。本文從 DBA 視角,解析 CLR 整合架構、效能優勢、安全模型、工具選擇決策框架,協助建立治理政策。
本文基於 SQL Server 2005 預發布資訊,功能細節可能調整。正式產品資訊請參考 Microsoft SQL Server 官網。
| 既有選項 | 限制 |
|---|---|
| T-SQL | 集合運算強、但程序邏輯、複雜運算、錯誤處理、封裝能力弱 |
| 擴展預存程序 (XP) | 非受控 C++ 程式碼在 SQL 進程內執行,記憶體洩漏易導致伺服器當機;無法存取 .NET Framework 類別庫 |
| sp_OA* (COM) | 介面限制多、效能差、不支援高併發、可能彈出 UI 對話框掛住伺服器 |
| 外部應用程式 (ADO/ADO.NET) | 資料須跨進程邊界移動,大量資料集網路傳輸成本高;無法建立第一類函數/型別 |
SqlConnection("context connection=true") 直接連接內部查詢處理器,零網路開銷所有設計目標:失控的 CLR 程式碼不得危及 SQL Server 可靠性。
sp_configure 'clr enabled', 1; RECONFIGURE;ALTER DATABASE [DBName] SET TRUSTWORTHY ON; (需謹慎使用)CREATE ASSEMBLY ... WITH PERMISSION_SET = SAFE | EXTERNAL_ACCESS | UNSAFE原則:預設全關,需求驅動逐層開放,最小權限原則。
| 角色 | 建議工具 |
|---|---|
| 開發人員 | Visual Studio 2005+ (Database Project)、SQL Server 2005 Developer Edition、MSDN、Visual SourceSafe/TFS |
| 測試環境 | SQL Server 2005 Express / Developer Edition、模擬生產資料規模與敏感度 (可用 SSIS 脫敏) |
| DBA | Management Studio、Profiler、SQLCMD、SMO、DDL Trigger 稽核部署 |
注意:VS 偵錯器單執行緒,不適合生產環境偵錯。開發人員應擁有專屬開發實例。
面對多重技術選擇,建議:
CLR 整合是 SQL Server 邁向可程式化資料平台的關鍵一步。優勢在於第一類語言生產力、豐富類別庫、高效能進程內執行;風險在於非受控程式碼可能危及穩定性。DBA 應建立:預設關閉 → 需求驅動啟用 → 最小權限集 → 原始碼版控 → 持續監控 → 嚴格部署管控 的全生命週期治理流程。下篇將深入目錄查詢、安全模型細節、原始碼管理與監控實務。