延續上一篇 UDT 基礎介紹,本文透過兩個實際案例深入探討非整數型別 UDT 的實作細節:時間格式化與年齡區間判斷。
當 UDT 非為單純整數型別時,必須同時實作 INullable 與 IBinarySerialize 兩個介面。這是因為 SQL Server 原生序列化僅支援實值型別,參考型別(如 string)需要自訂序列化邏輯。
public void Read(System.IO.BinaryReader r)
{
this.ageGroup = r.ReadString();
}
public void Write(System.IO.BinaryWriter w)
{
w.Write(this.ageGroup);
}
這兩個方法分別負責從二進位資料流還原物件、將物件寫入二進位資料流,是 UDT 能在資料庫中正確儲存的關鍵。
參考前文完整實作,核心邏輯在 Parse 方法中呼叫格式化函式,將各種時間字串統一轉換為標準格式儲存。
輸入年齡數值,自動回傳對應的生命階段字串(童年、少年、青年、中年、老年)。此範例展示如何在 UDT 中封裝商業規則邏輯。
[SqlUserDefinedType(Format.UserDefined, MaxByteSize=10)] 必須指定足夠的位元組大小ComputeAgeGroup),提高可測試性ageGroup),而非原始輸入完成建置後,在 SSMS 執行部署腳本,即可在 T-SQL 中直接使用:
DECLARE @age AgeGroup = '25';
SELECT @age.ToString(); -- 回傳 '青年'
UDT 能將領域邏輯封裝在型別系統中,確保資料進入資料庫的那一刻就符合業務規則。這兩個範例涵蓋了字串處理與數值判斷的常見場景,掌握後可舉一反三應用於更多業務場景。