2013-11-28 55 views
4

在編寫事務SQL操作時,我經常使用@@ ERROR來確定事務中是否發生了某些問題。但是我真的不知道TRY ... CATCH異常處理的優點和缺點是什麼,或者哪一個更好。請澄清這些與有用的情景之間的區別。在SQL Server中使用TRY ... CATCH和@@ ERROR有什麼區別?

在此先感謝, Vinu。

+1

您可能會覺得這很有用 - http://stackoverflow.com/questions/1111501/error-and-or-try-catch – MusicLovingIndianGirl

+0

必須閱讀[SQL 2005和更高版本中的錯誤處理](http://sommarskog.se /error_handling_2005.html) –

回答

2

@@ERROR會發生錯誤時立即填充,但如果有執行發生@@ERROR後的誤差將其值重置爲NULL,所以期待可以在那裏可能發生錯誤,並且存儲其值的變量等另一個語句等等似乎很麻煩。

在哪裏,如果你正在TRY...CATCH塊的使用,只要在TRY發生錯誤阻止您控制跳轉到CATCH塊,你可以利用該系統錯誤的功能,它可以給你詳細信息關於錯誤。如果沒有錯誤發生,那麼控制器不會進入CATCH塊。

他們中的一些系統錯誤職能是:

ERROR_LINE() 
EROR_MESSAGE() 
ERROR_Severity() 
ERROR_PROCEDURE() 
ERROR_STATE() 

因此,我個人認爲使用TRY...CATCH讓您的生活更輕鬆了很多的開發者。

1

嗯,你是正確的,他們有一些共同的東西,比如 - 他們都派上用場的錯誤處理和故障排除,但在底線,他們是完全不同的:

  • @@ERROR會給你error number for the last Transact-SQL statement executed. ie它會給信息關於發生的錯誤。
  • TRY-CATCH執行錯誤處理。一旦發生錯誤,流程將被中斷並且CATCH語句中的代碼將被執行。

個人而言,我通常爲了停止執行的根據錯誤的流中使用TRY-CATCH,並使用ERROR_MESSAGE()ERROR_NUMBER()有關錯誤的性質的信息。

我認爲this answer表現得相當好。

相關問題