如何从存储过程中捕获错误?在sql中

时间:2012-10-03 21:57:21

标签: sql sql-server variables parameters try-catch

我有一个存储过程可以返回错误,这个例子总是会返回错误

create proc regresaerror
as
begin
 raiserror 51001 'Error al borrar los precios especiales' 
end

declare @error varchar(max)
set @error=''
begin try
set @error=exec regresaerror
end try
begin catch
end catch

我试过了(因为我需要在临时表中插入此错误)但是该块代码会出现此错误

  

Msg 156,Level 15,State 1,Line 4
  关键字'exec'附近的语法不正确。

无法更新存储过程以添加输出变量

然后我怎样才能发现错误?

1 个答案:

答案 0 :(得分:1)

第一个解决方案:

BEGIN TRY
    EXECUTE regresaerror
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;

Here是MSDN的链接。

第二个解决方案:

create proc regresaerror 
(
  errmsg varchar(max) out
)
as
begin
 set errmsg =  'Error al borrar los precios especiales' 
 return 51001 -- if error
end 

declare @error varchar(max)
declare @numerror int
set @error=''   
exec @numerror = regresaerror @error out