Я в лагере без триггеров для этого конкретного сценария проектирования. Сказав это, имея ограниченные знания о том, что делает ваше приложение и почему оно это делает, вот мой общий анализ:
Использование триггера на столе имеет преимущество в том, что может действовать на все действия на столе. Вот и все, ваше главное преимущество в этом случае. Но это будет означать, что у вас есть пользователи с прямым доступом к таблице или несколько точек доступа к таблице. Я склонен избегать этого. Триггеры имеют свое место (я их часто использую), но это один из последних инструментов проектирования баз данных, которые я использую, потому что они, как правило, мало знают об их контексте (как правило, о силе) и при использовании в местах, где они действительно нужны знать о различных контекстах и общих случаях использования, их преимущества ослаблены.
Если обе версии приложения должны запускать одно и то же действие, они оба должны вызывать один и тот же сохраненный процесс. Хранимая процедура может гарантировать, что вся соответствующая работа выполнена, и когда ваше приложение больше не нуждается в поддержке V1, эту часть хранимой процедуры можно удалить.
Вызов двух хранимых процедур в вашем клиентском коде - плохая идея, потому что это уровень абстракции сервисов данных, которые база данных может предоставлять легко и согласованно, при этом ваше приложение не беспокоится об этом.
Я предпочитаю больше контролировать интерфейс к базовым таблицам - с помощью представлений, UDF или SP. Пользователи никогда не получают прямой доступ к столу. Другой момент заключается в том, что вы можете представить один «пользовательский» VIEW или UDF, объединяющий соответствующие базовые таблицы, даже не подозревая об этом пользователя - возможно, дойдя до точки, где не требуется даже никакой «синхронизации», поскольку новые атрибуты находятся в Система EAV, если вам нужна такая патологическая гибкость или какая-то другая структура, к которой все еще можно присоединиться - скажем, UDF APPLY UDF и т. Д.