【问题标题】:Linked server can't start distributed transaction in trigger链接服务器无法在触发器中启动分布式事务
【发布时间】:2015-01-10 17:30:59
【问题描述】:

我有一个调用存储过程的触发器。在存储过程中有一个链接服务器上的 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 已启用。我的 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

【问题讨论】:

    标签: tsql triggers linked-server msdtc


    【解决方案1】:

    我发布得太快并找到了答案,是的,DTC 设置错误。我启用了“允许入站”、“允许出站”和“不需要身份验证”,现在它可以工作了。

    【讨论】:

    • 在哪里可以找到这 3 个设置?
    【解决方案2】:

    --固定: EXEC master.dbo.sp_serveroption @server=N'SVRLINK', @optname=N'remote proc transaction Promotion', @optvalue=N'false'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多