在SQL Server中使用TRY ... CATCH和@@ ERROR有什么区别?

时间:2013-11-28 10:19:18

标签: sql sql-server database tsql

在编写事务SQL操作时,我经常使用@@ ERROR来查明事务中是否发生了某些问题。但我真的不知道它与TRY ... CATCH的异常处理有什么优缺点,或者哪个更好。请澄清这些与有用的场景之间的区别。

提前致谢, Vinu。

2 个答案:

答案 0 :(得分:2)

一旦发生错误,

@@ERROR将被填充,但如果在错误发生后有另一个语句执行@@ERROR将其值重置为NULL,那么预测错误可以在何处可能发生并将其值存储到变量等等似乎很麻烦。

如果您正在使用TRY...CATCH阻止,只要TRY阻止发生错误,您的控件就会跳转到CATCH阻止,并且您可以使用系统错误功能,可以为您提供有关错误的详细信息。如果没有错误发生,则控件永远不会进入CATCH块。

其中一些系统错误功能是:

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

因此,我个人认为使用TRY...CATCH会让您的生活变得更容易作为开发人员。

答案 1 :(得分:1)

嗯,你说他们有一些共同点是正确的,例如 - 它们都可以用于错误处理和故障排除,但最重要的是它们完全不同:

  • @@ERROR会向您提供error number for the last Transact-SQL statement executed.,即它会提供有关已发生错误的信息
  • TRY-CATCH实现错误处理。一旦发生错误,流将被中断,并且将执行CATCH语句中的代码。

就个人而言,我通常使用TRY-CATCH来阻止错误执行,并使用ERROR_MESSAGE()ERROR_NUMBER()获取有关错误性质的信息。

我认为this answer很好地证明了这一点。