首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server CLR 整合:透過 Managed UDT 擴展型別系統

     編輯:關於SqlServer

SQL Server 2005(代號 Yukon)引入 CLR 整合,允許使用 .NET Framework 語言(C#、VB.NET)建立使用者定義型別,突破內建資料型別限制,實現複雜資料的封裝、驗證與運算。

Managed UDT 核心概念

  • 不透明/抽象型別:UDT 向 T-SQL 呈現為單一不可分割的值,內部結構封裝在組件中。
  • 建立組件:編譯 .NET 類別庫為 DLL,以 CREATE ASSEMBLY 註冊至資料庫。
  • 註冊 UDT:CREATE TYPE 將 .NET 類別對應至 SQL 型別系統。

實作流程概覽

  1. 建立 Class Library 專案,實作 Microsoft.SqlServer.Server.SqlUserDefinedType 屬性標記的結構體/類別。
  2. 實作必要介面:IBinarySerialize(序列化)、INullable、ToString()/Parse()(字串轉換)。
  3. 編譯 DLL,於 SSMS 執行 CREATE ASSEMBLY MyUDT FROM 'path\dll' WITH PERMISSION_SET = SAFE;。
  4. 建立型別:CREATE TYPE dbo.MyType EXTERNAL NAME MyUDT.[Namespace.ClassName];。
  5. 即可在資料表、變數、參數中使用 dbo.MyType。

適用場景

  • 複雜結構資料:經緯度座標、貨幣組合、IP 位址區段、幾何圖形。
  • 需封裝驗證邏輯:如身分證字號、統一編號、ISBN 碼。
  • 需支援自訂運算子/方法:如向量加減、日期區間重疊判斷。

權限集合與安全性

PERMISSION_SET說明
SAFE預設,僅允許運算、資料存取,不可存取外部資源(檔案、網路、登錄)。
EXTERNAL_ACCESS允許存取外部資源,需資料庫設定 TRUSTWORTHY 或簽署非對稱金鑰/憑證。
UNSAFE完全信任,可呼叫 Unmanaged 碼、操作執行緒、記憶體,極度不建議生產環境使用。

版本演進提醒

  • SQL Server 2005/2008/2008 R2:CLR 整合預設關閉,需 sp_configure 'clr enabled', 1; RECONFIGURE; 啟用。
  • SQL Server 2012+:持續支援,但建議優先考慮 資料表值參數(TVP)、JSON/XML 型別、空間資料型別 等內建功能,僅在極度需要封裝邏輯時使用 UDT。
  • Azure SQL Database:不支援 CLR 組件,需改用應用層處理或內建型別。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved