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

來源:互聯網
上載者:User

大多數迭代語言編譯器都有內建的錯誤處理程式(例如,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
)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.