我需要将错误传递给应用程序。我编写了如下存储过程: 它是将错误传递给应用程序还是我们需要做更多的事情?
例如
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?更重要的是可以在上面例如。将错误传递给应用程序?
答案 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用于信息性消息。