程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 深入理解SQL Server 中的錯誤處理

深入理解SQL Server 中的錯誤處理

編輯:關於SqlServer

大多數迭代語言編譯器都有內置的錯誤處理程序(例如,TRY…CATCH語句),開發者們在設計代碼的時候可以利用它們。雖然SQL Server 2000的開發者不能夠像迭代語言的開發者那樣利用內置的工具,但是他們可以用系統變量@@ERROR來設計自己有效的錯誤處理工具。

引入事務

為了能夠掌握在SQL Server 2000中錯誤處理是如何工作的,你必須首先要理解數據庫事務的概念。在數據庫術語中,事務就是指作為一個單獨的工作單位出現的一系列語句。舉個例子來說,假設你有三個語句要執行,事務就可以這樣被設計,要麼所有三個語句都成功發生,否則就一個都不發生。

在SQL Server中執行數據處理操作時,操作是在緩沖存儲器中發生的,並不是立即被寫入實際的表格中。然後,當SQL Server運行CHECKPOINT進程時,已經發生的變化才被寫入磁盤。這也就意味著,在事務發生的過程中,變化並不被寫入磁盤,直到它被提交了,才會被寫入。運行時間較長的事務需要更多的處理存儲空間,需要數據庫保持更長時間的鎖定。所以當你在工作環境中設計運行時間長的事務時,一定要小心。

下面是一個很好的例子,說明了利用事務的好處。從ATM中取錢需要以下幾個步驟:輸入一個PIN號碼,選擇一個帳戶類型和輸入你想要提取的資金的金額。如果你試圖從ATM中取出50美元,然後操作失敗,你肯定不願意在沒有拿到錢的情況下被扣除50美元。事務就可以被用來保證這種一致性。

SQL Server 2000中成功的錯誤處理需要始終如一地檢查系統變量@@ERROR 的值。@@ERROR是指在所有語句在給定的連接下,在服務器上被執行以後,由SQL Server數據庫引擎更新的一個變量。這個變量中包括了相應的錯誤號碼,如果有的話。你可以在主數據庫的sysmessages表格中找到這些錯誤號碼的列表。關於這個表格的詳細資料在微軟的網站上已經被列出。

下面是一個說明變量@@ERROR如何工作的例子:

PRINT 'Taking a look at @@ERROR'
PRINT @@ERROR

在這些指令中,我們將在屏幕上顯示一個字符串,並輸出變量@@ERROR的值。因為屏幕上輸出的沒有錯誤,所以@@ERROR的值為0。

PRINT 1/0
PRINT @@ERROR

在上面這個例子中,我們發生了用0作除數的錯誤,這樣變量@@ERROR中將包括數字8134,它是微軟給這種錯誤分配的錯誤代號。對於大多數錯誤處理來說,只有當@@ERROR的值不為0時,即顯示有錯誤發生的時候,你才會關注到它。在記錄錯誤的時候,留意每個錯誤號碼不失為一個好辦法,因為這樣的話,在調試過程中,調用它們就很方便了。

工作中的錯誤處理

下面是一個關於怎樣在存儲過程中利用錯誤處理的例子。示例腳本的目的是要執行一個存儲過程,定義一個事務,然後在一個表格中插入一條記錄。因為只是為了解釋說明的目的,所以我們用以下的方式設計該程序,這樣就可以知道到底是提交還是重新運行該項事務。

執行下面的語句來創建我們在例子將要用到的表格:

CREATE TABLE Transactions
(
   TranID SMALLINT IDENTITY(1,1) PRIMARY KEY,
   EntryDate SMALLDATETIME DEFAULT(GETDATE()),
   ParamValue CHAR(1),
   ThrowError BIT
)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved