2013-11-28 54 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表现得相当好。

相关问题