用SQL Server資料庫處理資料層錯誤
開發人員在努力做到妥善地處理意外,這樣使用者就不用擔心天書般的系統錯誤資訊。出於這個原因,異常處理是每個.net應用程式的一個標準部分。Try/catch塊讓你能夠捕捉異常並從該點控制應用程式的執行。與資料庫進行互動操作的時候會發生很多錯誤,但是很多開發人員都不知道如何處理資料庫層的錯誤。本週我們將探討如何利用SQLServer和T-SQL來處理你資料庫程式碼裡的錯誤。
處理T-SQL裡的錯誤
SQLServer的SQL對話讓你能夠輕鬆地處理可能會在儲存程式、函式裡發生的非致命錯誤,但是並不是所有的錯誤都很容易處理。事實上,致命和非致命的錯誤有很多。什麼是致命的,什麼是非致命的,對此沒有很完備的文件說明,但是你的應用程式程式碼總是可以利用try/catch塊來處理致命的資料庫錯誤。對於其他所有的錯誤,你可以使用下面的技術。
事務
你應該在資料庫程式碼裡使用事務,以確保在一切都沒有問題的時候所有的更改都被完成。SQLServer的線上幫助將事務描述為任務的一個邏輯單元,它由一系列語句(選擇、插入、更新,或者刪除等)組成。如果在事務期間沒有發生任何錯誤,那麼對事務的所有改動都會成為資料庫的永久部分。如果在這期間發生了錯誤,不會對資料庫進行任何修改。
事務包含在BEGIN TRANSACTION和END TRANSACTION語句之間。ROLLBACK TRANSACTION語句可以取消所有的更改,因此不會發生任何變化。用COMMIT TRANSACTION語句可以進行永久的更改。現在,就讓我們把注意力放在如何處理T-SQL裡的錯誤上。
@@Error
@@Error函式讓你可以實現T-SQL錯誤處理。它會返回由系統所返回的錯誤程式碼。如果沒有錯誤發生就會返回“0”。@@Error函式必須緊接在一個語句之後立即被呼叫,因為它會在每個T-SQL語句之後被清除。
RAISERROR
RAISERROR語句讓你能夠生成一個自定義的錯誤資訊或者使用一個放在sysmessages表格裡的已有訊息。你可以線上檢視它的句法,但是它的最基本格式包括了訊息(用於自定義的訊息)或者訊息id(用於已有的訊息)和它的嚴重度及狀態。SQLServer沒有使用狀態,所以隨便傳遞給它一個數字就可以了。嚴重度表示了錯誤的嚴重程度,0-18供使用者使用,而19-25保留給管理員使用。
下面的示例儲存過程使用了這些特性來更新示例Northwind資料庫裡的一條記錄:
CREATE PROCEDURE sp_UpdateCustomERPhone( @id nvarchar(5), @phone nvarchar(24), @retvalueint output ) AS BEGIN BEGIN TRANSACTION UPDATE [dbo].[Customers] SET [Phone] = @phone WHERE([CustomerID] = @id) IF (@@ERROR <> 0) -- a non-negative value signals an error BEGIN ROLLBACK TRANSACTION -- changes are not permanent RAISERROR("Update Customers Error",1,1) -- raise a custom error message -- Custom error message appears if run from console SET @retvalue = -1 -- return negative value to signalproblems END COMMIT TRANSACTION -- make the changes permanent, so record is updated SET @retvalue = 1 -- a positive return value signalssuccess RETURN END |
如果沒有錯誤發生,它就把電話號碼列設定為一個值,傳遞給過程。它使用一個返回值引數,如果有問題發生它就返回一個負值,如果用所有的東西都執行沒有問題,它會返回一個正值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-369050/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server DACPAC資料庫部署錯誤SQLServer資料庫
- 資料庫資料恢復—附加資料庫錯誤823的SQL Server資料恢復案例資料庫資料恢復SQLServer
- SQL Server資料庫出現邏輯錯誤的資料恢復SQLServer資料庫資料恢復
- Sql server資料庫人員:常見錯誤(轉)SQLServer資料庫
- sql server資料庫錯誤資料恢復(資料庫連線失效,無法附加查詢)SQLServer資料庫資料恢復
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- sql server資料庫附加錯誤的解決過程SQLServer資料庫
- 解除sql server資料庫佔用SQLServer資料庫
- 【資料庫資料恢復】磁碟空間不足導致sql server錯誤的資料恢復資料庫資料恢復SQLServer
- SQL Server雨情處理自動補資料SQLServer
- 誤刪資料庫資料檔案的處理方法資料庫
- SQL Server 資料庫查詢死鎖的處理步驟SQLServer資料庫
- SQL Server 2005資料庫IN運算的一個錯誤SQLServer資料庫
- 利用索引提高SQL Server資料處理的效率索引SQLServer
- Saas模式資料庫層資料架構以及資料刪除處理 (轉)模式資料庫架構
- SQL Server資料庫中處理空值時常見問題SQLServer資料庫
- 在SQL Server資料庫中使用批處理的注意事項SQLServer資料庫
- SQL Server資料庫安全SQLServer資料庫
- SQL Server 資料庫映象SQLServer資料庫
- SQL Server 資料庫索引SQLServer資料庫索引
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL SERVER 裡的錯誤處理(try catch)SQLServer
- SQL SERVER收集資料庫使用增量資料SQLServer資料庫
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- access資料庫80040e09錯誤處理辦法資料庫
- SQL Server實戰二:建立、修改、複製、刪除資料庫表並加以資料處理SQLServer資料庫
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server 2005對海量資料的處理SQLServer
- ASP+SQL Server之圖象資料處理 (轉)SQLServer
- SQL Server收縮資料庫SQLServer資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 還原SQL Server資料庫SQLServer資料庫
- sql server跟蹤資料庫SQLServer資料庫
- SQL Server資料庫監控SQLServer資料庫
- 資料庫例項 (SQL Server)資料庫SQLServer
- Sql Server系列:資料庫操作SQLServer資料庫