Можно использовать связанный сервер и триггер, но у меня есть только плохие впечатления от этого.
Почему бы не использовать триггеры?
Двусторонняя синхронизация с триггерами сложна, потому что триггеры будут запускать друг друга . Вам придется каким-то образом контролировать это, например, с помощью специальных значений.
В противном случае вы получите странные ошибки блокировки.
Вам потребуется настроить MSDTC (координатор распределенных транзакций) между связанными серверами
СУБД не может вам сильно помочь со связанными серверами. гораздо сложнее отлаживать SQL. Плохие запросы обычно просто зависают и время ожидания при несовпадении типов и т. Д.
Транзакции с несколькими записями в триггере ИЛИ в запросе, запускающем триггер, легко вызывают взаимоблокировки . Я хотел бы использовать триггеры только для очень простых обновлений (один оператор INSERT / UPDATE / DELETE) и даже тогда убедиться, что взаимоблокировки не могут возникнуть. Я помню одну интеграцию, которую мне пришлось полностью переписать, когда устаревшее приложение вызывало взаимоблокировку с триггером.
Альтернатива
Есть как минимум два вопроса:
- Синхронизация между таблицами односторонняя или двусторонняя?
- Совпадают ли схемы двух таблиц?
Если схемы совпадают, репликация должна быть идеальной как для односторонней, так и для двусторонней синхронизации.
Если схемы отличаются, как обычно в случае интеграции приложений (EAI), вы можете рассмотреть следующие вопросы:
- Службы интеграции (SSIS) или даже пакет dtsx, созданный инструментом импорта / экспорта
- Какой-нибудь другой инструмент EAI, если таковой имеется (например, BizTalk)
- программирование пользовательского инструмента интеграции
У меня нет большого опыта работы с инструментами EAI, но я сравниваю SSIS с пользовательскими решениями .NET. Могу только сказать, что вы сэкономите много времени, если сможете выполнить работу с SSIS.
Только если SSIS не работает или недоступен (SQL Express), я бы попытался запрограммировать службу Windows, службу WCF и т. Д.