我有一個存儲過程,似乎沒有正確記錄其錯誤。嘗試和抓住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