簡介
最近,我研究了一份對Edgewood Solutions客戶進行的調查,調查中詢問他們認為什麼是微軟的新發布的數據庫中最有價值的特性。一個不分職位、行業、公司規模和從業時間的常見回答就是加強的T-SQL。這些發現可以作為以下有關Transact-SQL編程擴展的貼士的基礎。
錯誤處理:TRY 和CATCH
將行轉換為列:PIVOT 和UNPIVOT
XML改進
貼士1:用TRY和CATCH進行錯誤處理
自帶的錯誤處理是T-SQL經常被用來與其他語言進行比較的缺點。SQL Server 2005引入了TRY和CATCH,與其他許多數據庫一樣。通過使用這種許多開發人員和數據庫管理員都熟悉的方式來進行錯誤處理將大大提高對SQL Server的信心。
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;
通過PIVOT 和UNPIVOT將行轉換為列
一位在保健公司上班的開發人員每當她的報告用戶想要將行轉換為列的時候,抱怨不止。這並不是一次良好的會話。她不得不編寫一些需要執行好多個CPU周期的復雜的代碼來給用戶提供他們想要的數據,對這些數據的要求是在正式報告需求基礎之上產生的。這些痛苦的會話在SQL Server 2005引入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
資源: 使用 PIVOT 和UNPIVOT, SQL Server 2005 在線書籍:ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/Html/24ba54fc-98f7-4d35-8881-b5158aac1d66.htm
改進的XML
XML普遍應用在通過許多異構的環境進行數據傳輸和在許多微軟的應用程序之間傳輸數據上;SQL Server 2005 XML特性改善了創建、存儲、傳輸和查詢XML數據的內在能力。現在可以在SQL Server中自然地完成如下:
創建一個可以被表的某列引用的XML計劃
CREATE XML SCHEMA COLLECTION [ . ]sql_identifIEr AS Expression
為一個表創建一個本地的數據類型,這個表在創建的時候具有指向XML計劃集合的指針,同時這個表放在與基本表不同的數據頁上,就像SQL Server 2000中的BLOB。
CREATE TABLE Orders
(OrderID int PRIMARY KEY NOT NULL,
OrderDetailsID int NOT NULL,
OrderDate datetime NOT NULL,
…
XMLOrder XML NOT NULL)
為存儲過程或者特別的事務創建一個變量作為XML數據類型
DECLARE @OrdersSchema XML
…
CREATE XML SCHEMA COLLECTION OrdersSchema AS @OrdersSchema
通過創建主要和第二索引來提高對XML數據訪問的速度
CREATE PRIMARY XML INDEX PXML_Orders_OrderID
ON OrdersSchema.Orders (OrderID);
GO
CREATE XML INDEX SXML_Order_OrderDetailsID
ON OrdersSchema.Orders (OrderDetailsID)
USING XML INDEX PXML_Orders_OrderID FOR PATH ;
GO
通過一個簡單的SELECT語句來查詢XML數據,將XML作為結果集的一部分,與表中余下的字段一起返回。
SELECT *
FROM Orders
WHERE OrderID = 123
結論
SQL Server 2005中的T-SQL通過擴展傳統關系型數據庫管理系統獲得了長足的進步。以上描述的各項只是冰山一角,T-SQL還有其他方面的提高,檢查DTS——現在是SQL Server集成服務,分析服務,報告服務等。這些都是有挑戰性的,然而令人興奮的是,了解SQL Server所有這些新功能的日子不遠了。