SQL Server在触发器中插入链接的MySQL服务器不起作用

时间:2011-09-02 10:37:14

标签: mysql sql-server linked-server

我正在尝试使用触发器测试插入到链接的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 交易在触发器中结束。批次已中止。

有人还建议在存储过程中执行插入操作并从触发器调用它,但这会产生相同的错误。 我错过了什么,或者这是不可能的?任何建议将不胜感激。

0 个答案:

没有答案