exec sp_addlinkedserver   'ITSV', ' ', 'SQLOLEDB', '192.168.0.1' 
exec sp_addlinkedsrvlogin  'ITSV', 'false',null, 'sa', '' create proc insert_book
as 
declare
@consaddress1 varchar(150),
@invoicenum1 varchar(15),
@tel1 varchar(50),
@consunit1 varchar(100),
@conmode1 varchar(50),
@boxnum1 varchar(10),
@ConTime1 varchar(8),
@sign1 varchar(2),
@min_id int,
@max_id int,
@i int
begin
BEGIN TRANSACTION
select @min_id=min(id) from ITSV.cof.dbo.t_test;
select @max_id=max(id)+1 from ITSV.cof.dbo.t_test;
set @i=@min_id;
while @i<@max_id
begin
select @consaddress1=consaddress,@invoicenum1=invoicenum,@tel1=tel,@consunit1=consunit,@conmode1=conmode,@boxnum1=boxnum,
@ConTime1=ConTime,@sign1=sign from ITSV.cof.dbo.t_test where id=@i;
insert into t_invoiceInfo values(@invoicenum1,@tel1,@consaddress1,@consunit1,@conmode1,@boxnum1,@ConTime1,@sign1)
set @i = @i+1
end
COMMIT TRANSACTION
end在我执行exec insert_book 的时候出现错误 错误代码为
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。谁能帮我解决下吗?  谢谢了

解决方案 »

  1.   

    --创建链接服务器exec sp_addlinkedserver   'ITSV', ' ', 'SQLOLEDB ', '192.168.0.1'
    exec sp_addlinkedsrvlogin  'ITSV', 'false ',null, 'sa', 'sa' 
    --查看链接服务器
    sp_helpserver 
      

  2.   

    --允許連接訪問存儲過程
    EXEC   sp_serveroption   'ITSV','rpc out','TRUE'  
      

  3.   

    两边服务器上的 MSDTC 服务都启用了吗?在开始分布事务时执行 SET XACT_ABORT ON 语句。
      

  4.   

    在两边的服务器上都需要启动 msdtc 服务,在命令行中运行 sc start msdtc
    在开始分布事务前,需要
    set xact_abort on
    begin tran 
    ...
    commit tran