У меня есть хранимая процедура, которая, кажется, неправильно регистрирует ее ошибки.Попробуйте и поймать на 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;
Ошибка процедурный объект не удается на наш старый друг «Имя столбца или количество предоставленных значений не соответствует определению таблицы.» Я исправил эту ошибку - это была глупая ленивая ошибка, но я сбив с толку, почему мой процесс регистрации ошибок не работал, ни одна строка не вставлена в мою таблицу ExtractsErrorLog.
Это ошибка времени компиляции, увидеть это: http://stackoverflow.com/questions/7286667/sql-try-catch-statement-not-handling-error- sql-server-2008 –
Можете ли вы опубликовать определение таблицы 'ExtractsErrorLog'? – Lamak
Спасибо, Иван - это имеет большой смысл - и эта нить также предлагает обходное решение. Извините, что пропустили его и отправили обратно. Я бы прочитал, что catch не поймал компиляцию, но я не вел, что это будет ошибка компиляции. Кто-нибудь знает, есть ли руководство в Интернете, чтобы понять, какие ошибки возникают при компиляции/перекомпиляции. Я могу понять, почему это было бы сейчас, и я полагаю, что отсутствующие таблицы и т. Д. Тоже? Но я хотел бы быть уверенным, и я не очень много думал об этом. – DanBennett