Сначала просмотрите статью Ремуса об обработке ошибок во вложенных транзакциях, чтобы понять весь объем вещей.
Затем попробуйте довести уровень ошибки до 16. Кроме того, вставьте исходную информацию об ошибке в ошибку.сообщение при сбросе ошибки, чтобы вы не потеряли эту информацию:
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
DECLARE
@ErrorMessage NVARCHAR(4000)
, @ErrorNumber INT
, @ErrorSeverity INT
, @ErrorState INT
, @ErrorLine INT
SELECT
@ErrorNumber = ERROR_NUMBER()
, @ErrorSeverity = ERROR_SEVERITY()
, @ErrorState = ERROR_STATE()
, @ErrorLine = ERROR_LINE();
SET @ErrorMessage
= '>> Msg %i, Level %i, State %i, Line %i'
+ CHAR(13)+CHAR(10)+ERROR_MESSAGE()
RAISERROR (
@ErrorMessage,16,1
, @ErrorNumber
, @ErrorSeverity
, @ErrorState
, @ErrorLine
)
END CATCH