Sql server 2008 不支持所需的事务接口

Sql server 2008 不支持所需的事务接口,sql-server-2008,db2,linked-server,Sql Server 2008,Db2,Linked Server,我已经在SQLServer2008R2和DB2之间创建了一个链接服务器 我可以从查询窗口进行选择和更新,但如果我尝试将更新的内容包装在BEGIN TRANSACTION-COMMIT TRANSACTION中,则会出现以下错误: 无法执行请求的操作,因为链接服务器“DB2”的OLE DB提供程序“DB2OLEDB”不支持所需的事务接口。 “DB2”是我的链接服务器的名称 我用四个部分的名称都试过了,例如 UPDATE [DB2].[TEST].[TEST].[TEST] SET [COL2] =

我已经在SQLServer2008R2和DB2之间创建了一个链接服务器

我可以从查询窗口进行选择和更新,但如果我尝试将更新的内容包装在BEGIN TRANSACTION-COMMIT TRANSACTION中,则会出现以下错误:

无法执行请求的操作,因为链接服务器“DB2”的OLE DB提供程序“DB2OLEDB”不支持所需的事务接口。

“DB2”是我的链接服务器的名称

我用四个部分的名称都试过了,例如

UPDATE [DB2].[TEST].[TEST].[TEST]
SET [COL2] = 2
WHERE [COL1] = 1
以及使用OPENQUERY,例如

UPDATE OPENQUERY (DB2, 'SELECT [COL2] FROM TEST.TEST WHERE [COL1]=1)
SET [COL2]=2
如果我只是执行这些语句,它就可以正常工作。如果我将它们包装在事务中,则不会


任何帮助都将不胜感激。

我对这个问题做了更多的挖掘,答案如下: 功能包中的DB2OleDB提供程序不支持事务,但HIS(主机集成服务)支持事务。 您还必须使用分布式事务,并在调用开始分布式事务之前将XACT_ABORT设置为ON

例如:

SET XACT_ABORT ON
go
BEGIN DISTRIBUTED TRAN
Go
INSERT INTO OPENQUERY (SYS1_DUW, 
      'SELECT * from STROBAEK.DUWTEST') 
      (AREAID, AREADESC,REGIONID) 
      values ('11111', 'Redmond', 101)
ROLLBACK TRAN
Go

exec ('SELECT * FROM STROBAEK.DUWTEST') at SYS1_DUW
Go

AREAID                AREADESC          REGIONID
00001                 BadBoy            104
00002                 BadGirl           105


BEGIN DISTRIBUTED TRAN
Go
INSERT INTO OPENQUERY (SYS1_DUW, 
      'SELECT * from STROBAEK.DUWTEST') 
      (AREAID, AREADESC,REGIONID) 
      values ('11111', 'Bellevue', 101)
COMMIT TRAN
Go       

exec ('SELECT * FROM STROBAEK.DUWTEST') at SYS1_DUW
Go

AREAID                AREADESC          REGIONID
00001                 BadBoy            104
00002                 BadGirl           105
11111                 Bellevue          101


BEGIN DISTRIBUTED TRAN
Go
UPDATE OPENQUERY (SYS1_DUW, 
      'SELECT * from STROBAEK.DUWTEST') 
       set AREADESC = 'Copenhagen' where REGIONID = 101
COMMIT TRAN
Go

SET XACT_ABORT OFF

exec ('SELECT * FROM STROBAEK.DUWTEST') at SYS1_DUW

AREAID                AREADESC          REGIONID
00001                 BadBoy            104
00002                 BadGirl           105
11111                 Copenhagen        101
一个问题:DTC和后视镜不能一起工作