В MS SQL до версии 2000 не было документированной возможности управлять значениями @@error / @@rowcount / @@identity при написании своих процедур (триггера и функции тоже являются процедурами. Первые — по документации, вторые — по поведению — функции спокойно поддерживают EXEC

. Конечно, были способы обхода, которые периодически приходилось менять. Однако T-SQL является ПРОЦЕДУРНЫМ языком. Мы все еще будем лицезреть эту зияющую идеологическую дыру в 2005? Как равно и достаточно грубое привнесение INSTEAD OF триггеров? Вспомним хотя бы про поведение scope_iodentity() при появлении instead of триггера на таблицу.
Про 2000 я скромно молчу

В нем даже с порядком получения RAISERROR клиентом бардак.