我有一个调用存储过程的触发器。在存储过程中,链接服务器上有一个INSERT语句,它给了我:
The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "MyServer" was unable to begin a distributed transaction.
但是当我用实际值替换sql字符串中的变量值并且我手动运行完全相同的语句(即不通过Trigger)时,它会插入记录。
已启用DTC。我的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
答案 0 :(得分:1)
我发布得太快,找到了答案,是的DTC设置错了。我启用了“允许入站”,“允许出站”和“无需身份验证”,现在可以正常运行。
答案 1 :(得分:1)
- 修正: EXEC master.dbo.sp_serveroption @ server = N' SVRLINK',@ optname = N'远程proc交易促销',@ optvalue = N' false'