SQL Server 2005 整合 Common Language Runtime (CLR),開發人員可使用 Visual Basic .NET、C# 等 .NET 語言撰寫預存程序、函數、觸發器、彙總、使用者定義型別(UDT),享有:
| 場景 | 建議語言 | 理由 |
|---|---|---|
| 主要資料存取、邏輯簡單/無 | T-SQL | 集合操作優化、網路往返少、原生最佳化 |
| 複雜計算、演算法、字串/正則處理 | .NET (C#/VB.NET) | 豐富類別庫、強型別、JIT 編譯、面向物件 |
| 需存取外部資源(檔案、Web Service、登錄) | .NET | T-SQL 受限,CLR 提供安全管控的外部存取 |
| 大量資料集運算、報表彙總 | T-SQL 或 CLR 彙總 | 視複雜度,CLR 彙總可封裝複雜邏輯 |
CLR 執行前執行驗證,確保程式碼不讀取未寫入記憶體、型別正確、呼叫慣例遵守,大幅降低緩衝區溢位、指標錯誤風險。
[Serializable]
[SqlUserDefinedAggregate(Format.Native)]
public struct Concatenate
{
private StringBuilder _sb;
public void Init() { _sb = new StringBuilder(); }
public void Accumulate(SqlString value) { if (!value.IsNull) _sb.Append(value.Value).Append(','); }
public void Merge(Concatenate other) { _sb.Append(other._sb); }
public SqlString Terminate() { return new SqlString(_sb.ToString().TrimEnd(',')); }
}
[Serializable]
[SqlUserDefinedType(Format.Native)]
public struct Point
{
public double X, Y;
public override string ToString() => $"({X},{Y})";
public static Point Parse(SqlString s) { /* 解析邏輯 */ }
}
SQL Server 2005 CLR 整合開啟資料庫程式設計新紀元,將 .NET 生態系統帶入資料庫引擎核心。明智選擇 T-SQL 或受控程式碼,善用新物件類型,將構建更安全、高效、可維護的資料庫應用系統。