Связанный сервер не может запустить распределенную транзакцию в триггере

У меня есть триггер, который вызывает хранимую процедуру. В хранимой процедуре есть оператор INSERT на связанном сервере, который дает мне:

The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "MyServer" was unable to begin a distributed transaction.

Но когда я заменяю значения переменных в строке sql фактическими значениями и запускаю точно такой же оператор вручную (т.е. не через триггер), он вставляет запись.

ДКН включен. Мои настройки DTC неверны?

Выполняется запрос:

INSERT INTO [MyServer].WorkForce.dbo.Faults (FaultID, CreatedOn, FaultStart, Reason, Description,  TaskID)
SELECT @NewFaultID, GETDATE(), T.CreatedOn, ISNULL(I.Reason, 'Unknown'), WFR.Description,
       T.TaskID
FROM Inserted I 
     INNER JOIN Tasks T ON I.TaskID = T.TaskID
     INNER JOIN FaultReasons WFR ON I.Reason = WFR.Reason
WHERE T.TaskID = I.TaskID

Я использую SQL Server 2012


person Cameron Castillo    schedule 13.11.2014    source источник


Ответы (2)


Я написал слишком быстро и нашел ответ, и да, настройки DTC были неправильными. Я включил «Разрешить входящие», «Разрешить исходящие» и «Аутентификация не требуется», и теперь это работает.

person Cameron Castillo    schedule 13.11.2014
comment
Где я могу найти эти 3 настройки? - person Arturo Lozano; 07.07.2020

--исправлено: EXEC master.dbo.sp_serveroption @server=N'SVRLINK', @optname=N'продвижение транзакции удаленного процесса', @optvalue=N'false'

person Hiram    schedule 25.06.2015