日期:2014-05-18  浏览次数:20559 次

请帮我看看这个分布式处理的问题???
我建立了一个链接服务器NXBWSERV

insert   into   NXBWSERV.DawTest.dbo.Dispose   values( '3 ', '测试成功 ')
执行这条语句成功

接下来我把这条语句放在触发器中却出现问题:
CREATE   TRIGGER   [trigger_Insert]   ON   [dbo].[myTest]  
FOR   INSERT
AS
insert   into   NXBWSERV.DawTest,dbo.Dispose   values( '3 ', 'asdf ')
go

insert   into   myTest   values( '1 ', '2 ', '3 ')--引发触发器执行

报错:服务器:   消息   7391,级别   16,状态   1,过程   trigger_Insert,行   4
该操作未能执行,因为   OLE   DB   提供程序   'SQLOLEDB '   无法启动分布式事务。
[OLE/DB   provider   returned   message:   新事务不能登记到指定的事务处理器中。   ]

请问这是怎么回事??怎么解决??



------解决方案--------------------
--try

CREATE TRIGGER [trigger_Insert] ON [dbo].[myTest]
FOR INSERT
AS
SET XACT_ABORT ON
insert into NXBWSERV.DawTest.dbo.Dispose values( '3 ', 'asdf ') --将逗号改为点
SET XACT_ABORT OFF
go
------解决方案--------------------
如果是windows2003请用dcomcnfg设置一下MSDTC属性,另外,ping目标服务器的机器名(不要ping IP),看看能能不能解析出该机器名!如果ping不通,分布式事务必然失败!分布式事务只人机器名,不认IP地址的!想办法能互相解析机器名就可以了!