我有一个存储过程,似乎没有正确记录其错误。尝试和抓住TSQL - 赶不捕获
代码错误,但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表中。
这是一个编译时错误,请参阅本:http://stackoverflow.com/questions/7286667/sql-try-catch-statement-not-handling-error- sql-server-2008 – 2013-02-26 15:24:15
你可以发布'ExtractsErrorLog'的表定义吗? – Lamak 2013-02-26 16:07:34
感谢Ivan - 这很有道理 - 并且该线程也提供了一种解决方法。对不起,错过了它并转贴。我读过这个catch没有捕获编译 - 但我没有扭转,这将是一个编译错误。 有谁知道是否有一个在线指南,了解编译/重新编译时会出现什么错误。我可以明白为什么这会是一个现在,我想也缺少表等?但我想确定一下,我没有太多的细节。 – DanBennett 2013-02-27 11:20:35