| 新類型 | 替代目標 | 最大長度 | 存儲特性 |
|---|---|---|---|
VARCHAR(MAX) | TEXT | 2 GB | 行內/行外自動切換,支持大多數字符串函數 |
NVARCHAR(MAX) | NTEXT | 2 GB | Unicode,同 VARCHAR(MAX) |
VARBINARY(MAX) | IMAGE | 2 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 類型:列/變量/參數/返回值均可用。
query(), value(), exist(), nodes(), modify() (XQuery/XPath)。CREATE XML SCHEMA COLLECTION 驗證/類型化 XML。@@ERROR,代碼膨脹、易遺漏、嵌套事務回滾極難。
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
XACT_ABORT ON 可使大多數運行時錯誤自動回滾事務並進入 CATCH。TRY...CATCH,但可在 CATCH 內調用含 TRY...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 等新類型,構建了面向複雜業務的豐富類型系統與健壯錯誤處理框架。