我正在尝试使用触发器测试插入到链接的MySQL服务器,但是遇到了一些问题。
系统 Windows 2003 Server正在运行 - SQL Server 2008 R2开发人员版 - MySQL 5.5.15.0服务器 - MySQL ODBC 5.1驱动程序
我按照这篇文章中的说明 - http://www.sqlservercentral.com/Forums/Topic340912-146-1.aspx将MySQL服务器链接到SQL服务器
我可以使用SSMS中的查询窗口对链接服务器中的行进行SELECT和INSERT。
当我尝试在触发器中对链接服务器执行INSERT时出现问题 触发
USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[update_trig] on [dbo.test]
for insert
as
SET XACT_ABORT ON
INSERT INTO OPENQUERY(MYSQL, 'select data from roh.test') values ('testing trigger')
当一行插入SQL服务器时,会发生以下错误
消息7391,级别16,状态2,过程update_trig,第7行 无法执行该操作,因为链接服务器“MYSQL”的OLE DB提供程序“MSDASQL”无法启动分布式事务。
在做了一些谷歌搜索后,有人建议在SET XACT_ABORT ON后向触发器添加一个COMMIT语句,所以触发器的最后一部分看起来像
SET XACT_ABORT ON
COMMIT
INSERT INTO OPENQUERY(MYSQL, 'select data from roh.test') values ('testing trigger')
这会在链接的MySQL服务器中进行插入,但会出错 -
Msg 3609,Level 16,State 1,Line 1 交易在触发器中结束。批次已中止。
有人还建议在存储过程中执行插入操作并从触发器调用它,但这会产生相同的错误。 我错过了什么,或者这是不可能的?任何建议将不胜感激。