錯誤處理一直是T-SQL開發的一個棘手部分。你曾經需要在基於逐個場景的基礎上運行每一個語句和處理他們之後手動檢查錯誤。事務管理也很煩瑣,因為你得指出你的事務的狀態,並恰當的回滾或提交。在SQL Server2005中,微軟通過增加Try...Catch塊到T-SQL中,提供了一個更新、更強大的錯誤處理能力。
異常處理很簡單;在執行你的代碼過程中有意外發生時,例如一個異常,你需要有一個例行方式去處理這個異常。要怎麼處理這個異常是由作為開發者的你來決定的。為了增加一個異常處理到你的T-SQL代碼中,采用Try…Catch塊。
如果你最近用過Visual Studio,你很可能熟悉Try…Catch塊的概念。在T-SQL中的執行和它很相似,但是在T-SQL 中,它實際上具有比你在Visual Studio中遇到的全面展開執行更少的選擇。要用Try…Catch,把你想運行的T-SQL放到Try塊裡面。如果在執行Try中的代碼過程中發生了一個嚴重級別為10或更高的錯誤,執行就會跳轉到Catch塊裡的異常處理代碼。基本結構如下所示:
BEGIN TRY
(T-SQL代碼放在這裡)
END TRY
BEGIN CATCH
(異常處理代碼放在這裡)
END CATCH
ROW_NUMBER函數
SQL Server2005為我們引入了一個ROW_NUMBER函數。你是否曾經需要為你的查詢結果集做行序號?你有時會發現能夠為行做序號是一件很有用的事情。從前,你不得不作棘手的事,像創建一個有序號列的臨時表,然後把你的select結果插入到這個臨時表中。現在,用ROW_NUMBER函數,你就可以獲得添加在你的結果集的增加列中的行序號。為了獲得行序號,你只要簡單的將ROW_NUMBER函數作為一列添加進你的select語句中。你還必須添加OVER語句以便告訴SQL Server你希望怎樣添加行序號。
SELECT ROW_NUMBER() OVER(ORDER BY employee_id) AS 'Row Number', * from dbo.employee
結果
Row Number employee_id Firstname Lastname soc_sec 1 5623222 Tim Jones 123-65-8745 2 5632111 Rob Kinkad 456-69-8754 3 6365666 Jim Miller 236-56-8989 4 7563333 Joe Roberts 564-89-5555