Може да успеете да го хвърлите отново по този начин:
..
END TRY
BEGIN CATCH
DECLARE @errnum int;
SELECT @errnum = ERROR_NUMBER();
RAISERROR (@errnum, 16, 1);
END CATCH
Най-вероятно обаче губите смисъл поради %s и т.н. контейнери в редовете sys.messages за ERROR_NUMBER()
Можете да направите нещо подобно, за да включите номера и да хвърлите отново оригиналното съобщение
..
END TRY
BEGIN CATCH
DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
SELECT
@errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
@errmsg = @errnum + ' ' + ERROR_MESSAGE();
RAISERROR (@errmsg, 16, 1);
END CATCH
Първите 5 знака са оригиналното число.
Но ако имате вложен код, тогава ще получите „00123 00456 Текст на грешка“.
Лично аз работя само с номера на SQL изключения, за да отделя моите грешки (50 000) от грешките на двигателя (напр. липсващи параметри), когато кодът ми не се изпълнява.
И накрая, можете да му предадете върнатата стойност.
Зададох въпрос относно това:Обработка на грешки в SQL Server:изключения и договорът база данни-клиент