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

SQL Server 2005 T-SQL 增強特性深度解析:大值類型、XML 原生、TRY...CATCH 異常處理

     編輯:關於SqlServer

大值數據類型:突破 8KB 限制

新類型替代目標最大長度存儲特性
VARCHAR(MAX)TEXT2 GB行內/行外自動切換,支持大多數字符串函數
NVARCHAR(MAX)NTEXT2 GBUnicode,同 VARCHAR(MAX)
VARBINARY(MAX)IMAGE2 GB二進制流,支持 FILESTREAM (2008+)
  • 語法:CREATE TABLE t (id INT, content VARCHAR(MAX));
  • 優勢:可作變量/參數/返回值、支持 =, LIKE, SUBSTRING, REPLACE 等、統計信息自動維護、索引鍵長度限制 900 字節 (可含 MAX 列但需 INCLUDE)。
  • 棄用:TEXT/NTEXT/IMAGE 將在未來版本移除,遷移腳本:ALTER TABLE t ALTER COLUMN c VARCHAR(MAX);

XML 原生數據類型

    XML 類型:列/變量/參數/返回值均可用。
  • 方法:query(), value(), exist(), nodes(), modify() (XQuery/XPath)。
  • Schema 集合:CREATE XML SCHEMA COLLECTION 驗證/類型化 XML。
  • 索引:主 XML 索引 + 路徑/屬性/值次級索引,大幅加速查詢。
  • 應用:半結構化數據、異構集成、SOAP/REST 載荷存儲、動態屬性包。

錯誤處理革命:TRY...CATCH 結構化異常處理

舊模式痛點

  • 每句後檢查 @@ERROR,代碼膨脹、易遺漏、嵌套事務回滾極難。
  • 嚴重錯誤 (>=20) 直接斷連接,無法捕獲。

新模式語法


BEGIN TRY
    BEGIN TRAN;
    -- 核心邏輯
    INSERT ...; UPDATE ...; DELETE ...;
    COMMIT TRAN;
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK TRAN;
    -- 錯誤信息收集
    SELECT
        ERROR_NUMBER()   AS ErrNum,
        ERROR_SEVERITY() AS Severity,
        ERROR_STATE()    AS State,
        ERROR_PROCEDURE() AS Proc,
        ERROR_LINE()     AS Line,
        ERROR_MESSAGE()  AS Msg;
    -- 可選:重新拋出、記錄日誌、發送告警
    -- THROW; -- 2012+ 重新拋出原始錯誤
END CATCH

關鍵行為

  • 捕獲嚴重級 11-19 錯誤(語法/運行時/約束/死鎖等),20+ 仍斷連接。
  • XACT_ABORT ON 可使大多數運行時錯誤自動回滾事務並進入 CATCH。
  • 不可嵌套 TRY...CATCH,但可在 CATCH 內調用含 TRY...CATCH 的存儲過程。
  • 編譯錯誤 (語法/對象不存在) 不進入 CATCH,需部署階段驗證。

完整演示腳本


USE demo;
CREATE TABLE student (stuid INT PRIMARY KEY, stuname VARCHAR(50));
CREATE TABLE score (stuid INT REFERENCES student(stuid), score INT);

-- 無 TRY...CATCH:外鍵違規導致後續語句不執行,事務提交部分成功
-- 有 TRY...CATCH:外鍵違規進入 CATCH,整事務回滾,無髒數據

結語

SQL Server 2005 的三大 T-SQL 增強——大值類型、XML 原生、TRY...CATCH——徹底現代化了數據建模與程式設計體驗。配合 2008+ 的 FILESTREAM, HIERARCHYID, GEOGRAPHY, DATE/TIME 等新類型,構建了面向複雜業務的豐富類型系統與健壯錯誤處理框架。

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