You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

触发器调用存储过程访问Access链接服务器报错求助

问题原因

触发器执行时会自动纳入SQL Server的事务上下文,而Microsoft.ACE.OLEDB.16.0驱动不支持参与分布式事务(MS DTC)。手动执行存储过程时,操作处于自动提交模式,无显式事务约束,因此可以正常运行;但触发器的事务会尝试让Access链接服务器的操作加入分布式事务,触发驱动不支持事务接口的错误。

解决方法

方法一:修改链接服务器设置,禁用分布式事务提升

  1. 打开SSMS,展开服务器对象 → 链接服务器,找到AccessDB链接服务器
  2. 右键选择属性,切换到服务器选项标签页
  3. 将「启用分布式事务处理」(Enable Promotion of Distributed Transactions)设置为False
  4. 确认「RPC Out」选项已设置为True(确保远程调用正常)

修改后,SQL Server不会尝试将Access的操作提升为分布式事务,触发器调用存储过程即可正常执行。

方法二:异步执行同步逻辑(脱离触发器事务)

如果方法一无效,可以通过SQL Server Agent作业异步执行存储过程,彻底脱离触发器的事务约束:

  1. 创建SQL Server Agent作业,作业步骤中执行EXEC [dbo].[SQL_ACCESS_SYNC]
  2. 修改触发器代码,替换直接调用存储过程的语句为启动作业:
    EXEC msdb.dbo.sp_start_job @job_name = '你的同步作业名称';
    
    作业会独立于触发器事务运行,不受事务上下文限制。

补充说明

确保SQL Server安装了对应位数的Microsoft.ACE.OLEDB.16.0驱动(64位SQL Server需安装64位驱动),手动执行正常说明此条件已满足。


内容的提问来源于stack exchange,提问作者Matt Crumpler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:12:37