SQL Server 2008: команда MERGE для таблицы с триггером вызывает ошибку - PullRequest
4 голосов
/ 14 мая 2011

У меня есть хранимая процедура, которая использует команду MERGE для синхронизации dbo.tableA с [mylinkedserver].dbo.TableA.

TableA имеет связанный с ним триггер вставки / обновления. Для простоты все, что делает триггер, это

print 'I am a simple trigger because i dont want to cause errors'

Когда выполняется SP (через приложение Windows .net), он выдает эту ошибку:

Поставщик OLE DB "SQLNCLI10" для связанного сервера "MyLinkedServer" вернулось сообщение "Нет транзакции активный ".

Если я удаляю триггер и снова выполняю сохраненный процесс, он выполняется абсолютно нормально.

Хранимая процедура также работает нормально (с триггером), если я запускаю ее через SSMS.

MSDTC включен на обоих серверах.

Сервер - это сервер Windows 2008, SQL Server 2008 с пакетом обновления 2.

Почему триггер вызывает эту ошибку?!?! ??

1 Ответ

2 голосов
/ 17 мая 2011

Реализация триггера с Merge немного сложнее. Это сводится к «для каждого действия, указанного в операторе слияния, должен быть триггер».

TechNet Says "Если в целевой таблице включен включенный триггер INSTEAD OF для действия вставки, обновления или удаления, выполняемого инструкцией MERGE, то у нее должен быть включен триггер INSTEAD OF для всех действий, указанных в заявление MERGE. "

http://technet.microsoft.com/en-us/library/bb510625.aspx

...