我有一个似乎没有正确记录其错误的存储过程。
代码出错,但 catch 块似乎没有生效。
try 块相当长 - 但错误部分很简单,并且在最后,所以我已经精确了。
BEGIN TRY
insert into tbl_X
select * from #temp_tbl_Y
RETURN 1
END TRY
BEGIN CATCH
Insert Into ExtractsErrorLog
SELECT
getdate() as ErrorDate
,object_name(@@procid) as ProcedureName
,ERROR_NUMBER() as ErrorNumber
,ERROR_LINE() as ErrorLine
,ERROR_MESSAGE() as ErrorMessage
;
DECLARE @errormessage as varchar(max);
DECLARE @errorseverity as int;
DECLARE @errorstate as int;
set @errormessage = ERROR_MESSAGE();
set @errorseverity = ERROR_SEVERITY();
set @errorstate = ERROR_STATE();
RAISERROR (@errormessage,
@errorseverity,
@errorstate
);
END CATCH;
proc 失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误——这是一个愚蠢的懒惰错误——但我很困惑为什么我的错误记录过程似乎没有工作——没有行被插入到我的 ExtractsErrorLog 表中。