Я связал сервер с другим сервером. Я могу получить доступ к записям со связанного сервера, а также могу вставить запись с помощью оператора INSERT, например
INSERT INTO [LINKED-SERVER-IP].MyDb.dbo.Customer (CustomerId, CustomerName)
SELECT CustomerId, CustomerName FROM MyCustomers WHERE CustomerId = 5
Вышеуказанный запрос работает нормально и вставляет запись, но когда я использую этот запрос в триггере, я получаю следующую ошибку.
Поставщик OLE DB «SQLNCLI» для связанного сервера «Linked-Server-IP» вернул сообщение «Диспетчер транзакций партнера отключил поддержку удаленных / сетевых транзакций.». Произошла ошибка. Msg 3616, уровень 16, состояние 1, строка 1 Транзакция обречена на триггер. Пакетирование было прервано.
Спасибо.
Код в триггерах выполняется внутри той же неявной транзакции, что и оператор вставки / обновления / удаления. Следовательно, он пытается разделить транзакцию между обоими серверами, что по умолчанию запрещено.
У вас достаточно прав для изменения настроек? Если нет, то вы можете рассмотреть другие варианты, такие как вставка в локальную таблицу и репликацию данных, или использовать Service Broker, чтобы заставить другой процесс выполнить удаленную вставку.