Чтобы не потерять транзакционные данные перед действием триггера, вам нужно вызвать COMMIT TRAN. Сделайте это до блока TRY / CATCH, и вы получите желаемые результаты.
Пример:
COMMIT TRAN
BEGIN TRY
-- possible error occurs here...
END TRY
BEGIN CATCH
PRINT 'Error on line ' + CAST(ERROR_LINE() AS VARCHAR(10))
PRINT ERROR_MESSAGE()
END CATCH
Он все равно выдаст следующую ошибку - не уверен, как избежать:
The transaction ended in the trigger. The batch has been aborted.
Но исходная транзакция и триггерная транзакция должны успешно завершиться.
UPDATE:
Чтобы избежать исключения последней ошибки, вызовите BEGIN TRAN в операторе TRY. Обратите внимание, что Microsoft рекомендует НЕ вызывать COMMIT TRAN внутри триггера, но если это неизбежно, это должно работать для вас.
Пример:
COMMIT TRAN
BEGIN TRY
BEGIN TRAN