sql-server-2005 – 在SQL 2005存储过程中添加错误处理的最佳方法是什么?

什么是使存储过程足够健壮以便它们可以很好地扩展并且还包含错误处理的好方法?

此外,最新的方法是在存储过程中处理多个错误情况,并有一个智能反馈系统,将有意义的错误信息返回给调用应用程序?

最佳答案
Alex Kuznetsov在他的着作“防御性数据库编程”(第8章)中有一个很好的章节,涵盖了T-SQL TRY … CATCH,T-SQL事务和设置XACT_ABORT设置,并使用客户端错误处理.它将帮助您决定哪些选项最适合您需要完成的任务.

它在this site免费提供.我与该公司没有任何关系,但我拥有该书的硬拷贝版本.

亚历克斯很好地解释了这个主题的很多细节.

根据尼克的要求……(但并非所有这一切都在本章中)

在扩展方面,您需要粗暴地了解数据库代码中需要进行哪些活动以及哪些活动应该在应用程序中.有没有注意到快速执行的代码往往会回归到每个方法的单个关注点设计?

最简单的通信方式是自定义错误代码(> 50,000).它也很快.它确实意味着您必须保持db代码和应用程​​序代码同步.使用自定义错误代码,您还可以在错误消息字符串中返回有用的信息.因为您有严格的错误代码,所以您可以在针对错误数据格式定制的应用程序代码中编写解析器.

另外,哪些错误条件需要在数据库中重试逻辑?如果你想在X秒之后重试,那么你最好在应用程序代码中处理它,这样事务就不会阻塞那么多.如果您只是立即重新提交DML操作,则在SP中重复它可能会更有效.但请记住,您必须重复代码或添加一层SP才能完成重试.

真的,这是目前SQL Server中TRY … CATCH逻辑最大的痛苦.它可以做到,但它有点聋.在SQL Server 2012中寻找一些改进,特别是re-throwing system exceptions(保留原始错误号).此外,还有FORMATMESSAGE,它为构造错误消息增加了一些灵活性,特别是对于日志记录.

转载注明原文:sql-server-2005 – 在SQL 2005存储过程中添加错误处理的最佳方法是什么? - 代码日志