使用分布式查询(OpenQuery)执行插入触发器时出错

时间:2018-06-29 12:34:15

标签: mysql sql sql-server

我的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,并且它的状态正在运行,自动,请帮助我如何克服以上错误。

2 个答案:

答案 0 :(得分:2)

它的Distrubution tranasaction属性在链接服务器中创建proc / triggers时会中断,尤其是在使用非MSSQL连接的情况下

1)右键单击链接服务器

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

运行程序:

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

enter image description here

答案 1 :(得分:0)

您尝试过

SET XACT_ABORT OFF

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

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