【问题标题】:Error when executing Insert Trigger with distributed Querys (OpenQuery)使用分布式查询 (OpenQuery) 执行插入触发器时出错
【发布时间】:2018-12-08 15:46:36
【问题描述】:

我的 MSSQL 触发器:

ALTER TRIGGER [dbo].[ioTrigger_dbo_vsolv_mst_tproddtchng]
ON [dbo].[vsolv_mst_tproddtchng]
for INSERT
AS 
BEGIN
SET NOCOUNT ON;

INSERT  OPENQUERY (LINKED,'SELECT proddtchng_product_gid,
    proddtchng_mrp,
    proddtchng_tndpwtax,
    proddtchng_tndpwotax,
    proddtchng_kldpwtax,
    proddtchng_kldpwotax,
    proddtchng_costprice,
    proddtchng_website,
    proddtchng_purpose,
    proddtchng_weight,
    proddtchng_suitable,
    proddtchng_workingrange,
    proddtchng_cutoff,
    proddtchng_timedelay,
    proddtchng_description,
    proddtchng_validfrom,
    proddtchng_validto,
    proddtchng_createby,
    proddtchng_createdate,
    proddtchng_isactive,
    proddtchng_isremoved
from  vsolv_line_tn.vsolv_mst_tproddtchng')
SELECT 
    proddtchng_product_gid,
    proddtchng_mrp,
    proddtchng_tndpwtax,
    proddtchng_tndpwotax,
    proddtchng_kldpwtax,
    proddtchng_kldpwotax,
    proddtchng_costprice,
    proddtchng_website,
    proddtchng_purpose,
    proddtchng_weight,
    proddtchng_suitable,
    proddtchng_workingrange,
    proddtchng_cutoff,
    proddtchng_timedelay,
    proddtchng_description,
    proddtchng_validfrom,
    proddtchng_validto,
    proddtchng_createby,
    proddtchng_createdate,
    proddtchng_isactive,
    proddtchng_isremoved
FROM
    inserted;
END

当我执行上述触发器时,我收到以下错误:

链接服务器“LINKED”的 OLE DB 提供程序“MSDASQL”返回消息“[MySQL][ODBC 5.3(a) 驱动程序]不支持可选功能”。 消息 7391,级别 16,状态 2,过程 ioTrigger_dbo_vsolv_mst_tproddtchng,第 8 行 无法执行该操作,因为链接服务器“LINKED”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务。

我已经从 Sqlserver2008 创建了一个到 Mysql 的链接服务器,我已经配置了 DTC,它的状态是运行,自动,请帮助我应该如何克服上述错误。

【问题讨论】:

  • 您是否尝试使用 SQL 服务器在 Mysql 实例上创建触发器?
  • 是的,我正在使用..
  • 您能否详细说明您正在使用的 SQL 版本以及 Mysql,我假设您在托管 MSSQL 的 VM ware 中缺少 ODBC 驱动程序,或者它可能不是最新的。您是否可以使用openquery 执行选择查询
  • sql server 2008,mysql 5.7 版,我可以使用 openquery 执行选择查询
  • @Thomas 我敢打赌语法没有错。它与链接服务器的连接问题

标签: mysql sql sql-server


【解决方案1】:

它是您的 Distrubution tranasaction 属性,它在将过程/触发器创建到链接服务器时中断,尤其是在使用非 MSSQL 连接时

1) 右键点击链接服务器

2) 选择属性并启用此-将属性设置为 False

运行过程:

EXEC master.dbo.sp_serveroption @server=N'SVRLINK',
 @optname=N'remote proc transaction promotion', @optvalue=N'false

【讨论】:

【解决方案2】:

你试过了吗

SET XACT_ABORT OFF

SQL-Server 正在尝试启动分布式事务,以便在链接服务器 (myssql) 上进行可能的回滚。链接服务器选项中有一些设置可以启用分布式事务。

也许这会有所帮助: Distributed Transaction on Linked Server between sql server and mysql

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多