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

SQL Server 2005 UDT 進階實戰:時間格式化與年齡區間判斷

     編輯:關於SqlServer

前言

延續上一篇 UDT 基礎介紹,本文透過兩個實際案例深入探討非整數型別 UDT 的實作細節:時間格式化與年齡區間判斷。

核心提示:非 Int 型別必實作的介面

當 UDT 非為單純整數型別時,必須同時實作 INullable 與 IBinarySerialize 兩個介面。這是因為 SQL Server 原生序列化僅支援實值型別,參考型別(如 string)需要自訂序列化邏輯。

關鍵程式碼片段:IBinarySerialize 實作

public void Read(System.IO.BinaryReader r)
{
    this.ageGroup = r.ReadString();
}

public void Write(System.IO.BinaryWriter w)
{
    w.Write(this.ageGroup);
}

這兩個方法分別負責從二進位資料流還原物件、將物件寫入二進位資料流,是 UDT 能在資料庫中正確儲存的關鍵。

案例一:時間格式化 UDT

參考前文完整實作,核心邏輯在 Parse 方法中呼叫格式化函式,將各種時間字串統一轉換為標準格式儲存。

案例二:年齡區間判斷 UDT

輸入年齡數值,自動回傳對應的生命階段字串(童年、少年、青年、中年、老年)。此範例展示如何在 UDT 中封裝商業規則邏輯。

實作重點總結

  • 屬性設定:[SqlUserDefinedType(Format.UserDefined, MaxByteSize=10)] 必須指定足夠的位元組大小
  • Parse 方法:處理 Null 輸入、呼叫核心邏輯函式、回傳建構好的實例
  • 核心邏輯分離:將計算邏輯獨立為 static 方法(如 ComputeAgeGroup),提高可測試性
  • 序列化欄位:僅序列化必要的結果欄位(ageGroup),而非原始輸入

部署驗證

完成建置後,在 SSMS 執行部署腳本,即可在 T-SQL 中直接使用:

DECLARE @age AgeGroup = '25';
SELECT @age.ToString(); -- 回傳 '青年'

結語

UDT 能將領域邏輯封裝在型別系統中,確保資料進入資料庫的那一刻就符合業務規則。這兩個範例涵蓋了字串處理與數值判斷的常見場景,掌握後可舉一反三應用於更多業務場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved