T-SQL TRY CATCH的问题?

Jim*_*ans 14 t-sql sql-server try-catch

我们目前正在使用SQL 2005,我正在将旧的Foxpro系统迁移到由SQL Server支持的新Web应用程序.我在T-SQL中使用TRY CATCH进行事务处理,它似乎工作得很好.工作中的其他程序员之一担心这一点,因为他说他听说过一些问题,其中的口号并不总能发现错误.我已经击败了sproc to death并且无法让它失败(错过捕获)并且我在网上搜索的唯一问题是它不会返回错误编号<5000的正确错误编号.有没有人经历任何其他在T-SQL中使用TRY CATCH的问题 - 特别是如果它错过了捕获?感谢您提供的任何输入.

Mar*_*ith 24

TRY ... CATCH没有捕获到所有可能的错误,但没有捕获的错误在BOL 错误中有很好的记录,不受TRY ... CATCH构造的影响

TRY ... CATCH构造不会捕获以下条件:

  • 严重性为10或更低的警告或信息性消息.
  • 严重性为20或更高的错误会阻止会话的SQL Server数据库引擎任务处理.如果发生严重性为20或更高且数据库连接未中断的错误,则TRY ... CATCH将处理错误.
  • 注意事项,例如客户端中断请求或客户端连接断开.
  • 系统管理员使用KILL语句结束会话时.

当CATCH块出现在与TRY ... CATCH构造相同的执行级别时,它们不会处理以下类型的错误:

  • 编译阻止批处理运行的错误,例如语法错误.
  • 语句级重新编译期间发生的错误,例如由于延迟名称解析而在编译后发生的对象名称解析错误.

这些错误将返回到运行批处理,存储过程或触发器的级别.