在編寫事務SQL操作時,我經常使用@@ ERROR來確定事務中是否發生了某些問題。但是我真的不知道TRY ... CATCH異常處理的優點和缺點是什麼,或者哪一個更好。請澄清這些與有用的情景之間的區別。在SQL Server中使用TRY ... CATCH和@@ ERROR有什麼區別?
在此先感謝, Vinu。
在編寫事務SQL操作時,我經常使用@@ ERROR來確定事務中是否發生了某些問題。但是我真的不知道TRY ... CATCH異常處理的優點和缺點是什麼,或者哪一個更好。請澄清這些與有用的情景之間的區別。在SQL Server中使用TRY ... CATCH和@@ ERROR有什麼區別?
在此先感謝, Vinu。
@@ERROR
會發生錯誤時立即填充,但如果有執行發生@@ERROR
後的誤差將其值重置爲NULL
,所以期待可以在那裏可能發生錯誤,並且存儲其值的變量等另一個語句等等似乎很麻煩。
在哪裏,如果你正在TRY...CATCH
塊的使用,只要在TRY
發生錯誤阻止您控制跳轉到CATCH
塊,你可以利用該系統錯誤的功能,它可以給你詳細信息關於錯誤。如果沒有錯誤發生,那麼控制器不會進入CATCH
塊。
他們中的一些系統錯誤職能是:
ERROR_LINE()
EROR_MESSAGE()
ERROR_Severity()
ERROR_PROCEDURE()
ERROR_STATE()
因此,我個人認爲使用TRY...CATCH
讓您的生活更輕鬆了很多的開發者。
嗯,你是正確的,他們有一些共同的東西,比如 - 他們都派上用場的錯誤處理和故障排除,但在底線,他們是完全不同的:
@@ERROR
會給你error number for the last Transact-SQL statement executed.
ie它會給信息關於發生的錯誤。TRY-CATCH
執行錯誤處理。一旦發生錯誤,流程將被中斷並且CATCH語句中的代碼將被執行。個人而言,我通常爲了停止執行的根據錯誤的流中使用TRY-CATCH
,並使用ERROR_MESSAGE()和ERROR_NUMBER()有關錯誤的性質的信息。
我認爲this answer表現得相當好。
您可能會覺得這很有用 - http://stackoverflow.com/questions/1111501/error-and-or-try-catch – MusicLovingIndianGirl
必須閱讀[SQL 2005和更高版本中的錯誤處理](http://sommarskog.se /error_handling_2005.html) –