错误处理的基本原则?

时间:2011-03-23 18:47:53

标签: sql-server sql-server-2008 programming-languages error-handling

这是基本的编程问题,而不是特定的SQL Server问题。我想知道错误处理的基本原则是什么?发生错误时,代码是否应该抛出异常?异常是否总是终止程序或批处理?

2 个答案:

答案 0 :(得分:0)

如何处理错误通常取决于上下文。您可能会遇到某些错误。这种情况的一个例子可能是外围密钥违规。在这种情况下,您可能只希望记录错误(可能将其记录为信息而不是正确的错误)并向UI返回用户友好消息以通知用户发生了问题。其他错误是意外的。这些也应该被记录并报告给用户,并有可能进一步的步骤,以便将异常跟踪提供给开发团队(即通过电子邮件等)。

如今,许多现代编程语言都具有结构化异常处理功能,这使得异常捕获和记录异常非常简单。还有许多日志框架可以帮助记录日志。 .Net领域的良好日志框架包括log4net,nLog和elmah。对于所有这些日志框架,Web上应该有大量示例。

就SQL Server而言,错误处理功能不是那么先进。

处理存储过程中错误的常见模式类似于

create procedure [dbo].[test_dosomework]
(
  @param1 int,
  @param2 varchar(10)
)
as
begin
  declare @errorCode int

  select @errorCode = 0

  insert table1 (aValue)
  values (@param1)

  select @errorCode = @@ERROR

  if @errorCode = 0
  begin
    insert table1 (aValue2)
    values (@param2)

    select @errorCode = @@ERROR
  end 
  return @errorCode
end

在这种情况下,如果在任何一个insert语句中发生错误,@ ERROR将返回错误号,@ errorCode将被设置为具有此错误号,并且存储过程的返回值将是错误号的返回值。

的返回值为0

答案 1 :(得分:0)

如果您使用的是SQL 2005或2008,则应使用新的错误处理构造TRY/CATCH,而不是在每个语句后检查@@error。这是SQL 2000的做事方式,阅读和管理起来要困难得多。

您不必像已经讨论的那样捕获每个错误,因为批处理不会因某些错误而终止,但如果您想确保在几乎任何事情上中止事务,您应该使用SET XACT_ABORT ON。批次的开头。

Erland Sommerskog在线查看任何涉及错误处理的内容。他是着名的SQL Server MVP,以错误处理为专业。