任何程序都可能出現錯誤,在SQL Server中執行Transact-SQL也不例外。如果在Transact-SQL中發生了錯誤,一般有兩種捕捉錯誤的方法,一種是在客戶端代碼(如C#、Delphi等)中使用類似try...catch的語句進行捕捉;另外一種就是在Transact-SQL中利用Transact-SQL本身提供的錯誤捕捉機制進行捕捉。如果是因為Transact-SQL語句的執行而產生的錯誤,如鍵值沖突,使用第一種和第二種方法都可以捕捉,但是如果是邏輯錯誤,使用客戶端代碼進行捕捉就不太方便。因此,本文就如何使用Transact-SQL進行錯誤捕捉進行了討論。
一、非致命錯誤(non-fatal error)的捕捉
通過執行Transact-SQL而產生的錯誤可分為兩種:致命錯誤(fatal error)和非致命錯誤(non-fatal error)。在Transact-SQL中只可以捕捉非致命錯誤(如鍵值沖突),而無法捕捉致命錯誤(如語法錯誤)。在Transact-SQL中可以通過系統變量@@ERROR判斷最近執行的一條語句是否成功執行。如果發生了錯誤,@@Error的值大于0,否則值為0。下面舉一個例子說明@@ERROR的使用。
假設有一個表table1,在這個表中有兩個字段f1,f2。其中f1是主鍵。
| 以下為引用的內容: insert INTO table1 VALUES(1, ’aa’) insert INTO table1 VALUES(1, ’bb’) --這條語句將產生一個錯誤 IF @@ERROR > 0 |
PRINT ’鍵值沖突’
當執行第二條語句時發生鍵值沖突錯誤,@@ERROR被賦為錯誤號2627,因此輸出結果顯示’鍵值沖突’。使用@@ERROR系統變量時需要注意,@@ERROR只記錄最近一次執行的Transact-SQL語句所發生的錯誤,如果最近一次執行的Transact-SQL沒有發生錯誤,@@ERROR的值為0。因此,只能在被捕捉的那條Transact-SQL語句后使用@@ERROR。
新聞熱點
疑難解答