根據客戶調查,SQL Server 2005 最具價值的特性首推強化的 T-SQL。以下介紹三大核心增強功能。
以往 T-SQL 缺乏原生錯誤處理,需依賴 @@ERROR 檢查。SQL Server 2005 引入區塊式 TRY...CATCH,與主流語言一致,大幅提升程式碼健壯度。
BEGIN TRY
SELECT 1/0; -- 故意觸發除零錯誤
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
ERROR_NUMBER():錯誤代碼。ERROR_SEVERITY():嚴重性等級。ERROR_STATE():狀態碼。ERROR_PROCEDURE():發生錯誤的預存程序/觸發器名稱。ERROR_LINE():錯誤行號。ERROR_MESSAGE():完整錯誤訊息。CATCH 區塊可巢狀,支援 THROW 重新拋出 (SQL 2012+)。
以往需撰寫複雜 CASE/動態 SQL 實現行轉列。PIVOT 將資料列值旋轉為欄位,UNPIVOT 執行逆向操作。
USE AdventureWorks; GO
SELECT VendorID,
[164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
FROM (
SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader
) p
PIVOT (
COUNT(PurchaseOrderID)
FOR EmployeeID IN ([164], [198], [223], [231], [233])
) AS pvt
ORDER BY VendorID;
COUNT、SUM、AVG、MAX、MIN 等。IN 子句需列出所有目標欄位值,可搭配動態 SQL 處理未知值集合。CREATE XML SCHEMA COLLECTION 註冊 XSD,供 XML 欄位/變數驗證。CREATE TABLE Orders (OrderID int PRIMARY KEY, XMLOrder XML NOT NULL)。XML 欄位儲存於與基底資料表不同資料頁 (類似 BLOB),支援索引。CREATE PRIMARY XML INDEX PXML_Orders_OrderID ON Orders (XMLOrder)CREATE XML INDEX SXML_Order_OrderDetailsID ON Orders (XMLOrder) USING XML INDEX PXML_Orders_OrderID FOR PATHquery()、value()、exist()、modify() (insert/delete/replace 節點)。SELECT * FROM Orders WHERE OrderID = 123 直接回傳 XML 欄位與其他關聯欄位。SQL Server 2005 T-SQL 透過 TRY/CATCH、PIVOT/UNPIVOT、原生 XML 類型與索引,將關聯式資料庫擴展至程序化錯誤處理、多維資料分析與半結構化資料管理領域。配合 Integration Services (原 DTS)、Analysis Services、Reporting Services,構建完整資料平台。立即體驗 Beta 版,掌握新一代資料庫開發技能。