SQL Server将错误传递给应用程序

时间:2010-02-03 02:23:40

标签: sql-server

我需要将错误传递给应用程序。我编写了如下存储过程: 它是将错误传递给应用程序还是我们需要做更多的事情?

例如

create procedure insert_emp 
as
  begin try
       begin tran
         insert into emp values(..........)
       commit;
   end try

   begin catch
     if @@trancount > 0
     rollback
     declare @errMessage varchar(2000),
     declare @errNumber int
     select @errMessage = error_message(), @errNumber = error_number()
     raiserror(@errMessage, @errNumber,1)
   end catch

如果没有错误需要传递0,如果出现错误则需要错误编号,如何使用raiserror执行此操作?我们如何使用raiserror将错误记录到error_table?更重要的是可以在上面例如。将错误传递给应用程序?

2 个答案:

答案 0 :(得分:1)

RAISERROR会将错误传递给客户端。

如果要在数据库中记录错误,请先在catch区域中执行此操作,然后拨打raiserror

如果您不想将错误传递给客户端(我曾在喜欢返回错误代码的公司工作过),那么您只需从过程中返回一个非零值,而不是调用raiserror。 ,像这样:

RETURN -1

答案 1 :(得分:1)

不要通过raiserror(@errMessage, @errNumber,1)RAISERROR的参数是消息ID,严重性,状态。您正在传递@errNumber 严重性,这是不正确的。

您应该提出自定义错误,并在错误消息中传递捕获的异常信息,如消息格式插入:

RAISERROR(N'insert_emp: Error %i: %s', 16, 1, @errNumber, @errMessage);

对于要在客户端处理中抛出SqlException的错误(或根据所使用的客户端访问技术的其他异常),您应该使用严重级16。

您应该将严重性1用于信息性消息。