开发学院数据库MSSQL Server 使用Try…Catch块进行T-SQL错误处理 阅读

使用Try…Catch块进行T-SQL错误处理

 2008-09-04 10:00:45 来源:WEB开发网   
核心提示: Try块后面必须要直接接一个Catch块,否则就会发生一个错误,使用Try…Catch块进行T-SQL错误处理(2), Try…Catch不能嵌套, 如果Try块中的代码没有故障,错误和异常处理对于所有好的编程规范都是至关重要的,现在使用SQL Server 2005提供的T

Try块后面必须要直接接一个Catch块,否则就会发生一个错误。

Try…Catch不能嵌套。

如果Try块中的代码没有故障,将跳过Catch块,执行Catch块后的第一条语句。

当Catch块中的代码运行完毕后,将执行Catch块后的第一条语句。

处理错误

当一个错误发生后,你作为一名开发者需要决定如何处理它。因为你不能像.Net语言那样,将控制权重新转回引起错误的代码上,你所能做的可能就是将问题记入日志,并将所执行的事务进行回滚。为了帮助记录,有一些系统函数提供了错误的更全面的信息,这些函数的具体内容如下所示:

ERROR_NUMBER() – 返回错误号。

ERROR_SEVERITY() – 返回错误严重级别。

ERROR_STATE() – 返回错误状态。

ERROR_PROCEDURE() - 返回错误所在的存储过程或触发器的名称。

ERROR_LINE() - 返回错误所在行的行号。

ERROR_MESSAGE() - 返回错误的实际信息。

使用这些函数,你可以记录错误的详细信息,并将这些信息返回给调用它的过程或者记录,以便对错误进行追踪和修复。这些函数只能在Catch块被调用,在其它地方使用会返回NULL。然而,这些函数可以被Catch块中的代码所使用。也就是说,你可以调用一个存储过程来处理错误,于是这个存储过程就可以调用这些错误函数。下面就是这样的存储过程的一个示例: 

createPROCEDUREspLogError 
  AS 
  --给应用程序返回错误的详细信息 
  select 
  ERROR_NUMBER()ASErrNum, 
  ERROR_SEVERITY()ASErrSev, 
  ERROR_STATE()asErrState, 
  ERROR_PROCEDURE()asErrProc, 
  ERROR_LINE()asErrLine, 
  ERROR_MESSAGE()asErrMsg 
  --将错误记入错误数据库日志 
  insertINTOSQLErrors.dbo.ErrorLog 
  VALUES(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(), 
  ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE())

错误和异常处理对于所有好的编程规范都是至关重要的。现在使用SQL Server 2005提供的Try…Catch块,你可以实现更好的错误处理……

这个过程可以在你的Catch块中被调用,用来返回和记录错误的详细信息。

BEGIN TRY

--在这里插入代码:当错误发生时,控制权将被转到Catch块

END TRY

BEGIN CATCH

--这个过程将会记录错误并将详细信息返回给调用它的应用程序

exec spLogError

END CATCH

使用XACT_STATE()函数

还有一个错误函数我们在前面没有讨论,那就是XACT_STATE()函数。它可以在你的Catch块中被调用,返回你的过程中事务的准确状态。XACT_STATE()函数的返回值及其意义如下所示:

1 : 有一个活动的事务,它可以被提交或者回滚。

0 : 没有活动的事务。

-1 : 有一个活动的事务,但由于有错误发生,事务不能被提交。

基于这些返回值,你就可以处理你的食物。如果返回值是1,你可以正常的提交或者回滚。如果返回值是0,则并没有打开的事务,如果尝试提交将会产生一个错误。返回值-1比较特殊,它意味着有一个事物,但是它不能被提交。如果返回值是-1的话,你也不能回滚到一个保存点,而只能将整个事务进行回滚。

错误和异常处理对于所有好的编程规范都是至关重要的。现在使用SQL Server 2005提供的Try…Catch块,你可以实现更好的错误处理。

上一页  1 2 

Tags:使用 Try Catch

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接