操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。''''''''''''''
在储存过程中写入一语句
insert into AAA select * from kserver.wts.dbo.AAA where aID=@aID and bID=@bID把远程服务器kserveR数据库wts的表AAA的记录插入到本机表AAA中,就出现以上错误
但如果不在储存过程中写入,而直接运行的话就没有问题什么问题呢???

解决方案 »

  1.   

    已经建立好了 select * from kserver.wts.dbo.AAA 是没问题的,可以查询
    加上这样:insert into AAA select * from kserver.wts.dbo.AAA where aID=1and bID=2
    测试也没有问题,可以插入,但就是放到储存过程去,就不可以了,储存过程如下:
    create proc TrnServer(@aID int,@Bd int)
    AS
    set XACT_ABORT on   
    set ANSI_NULL_DFLT_ON on   
    set ANSI_WARNINGS on 
    BEGIN DISTRIBUTED TRANSACTION ThisTrans   
    insert into AAA select * from kserver.wts.dbo.AAA where aID=@aID and bID=@bID
    if @@ERROR=0
    commit transaction ThisTrans
    else
    rollback transaction ThisTransgo
      

  2.   

    难道不是这样用:exec TrnServer 1,2 
    ...........
    .....
    ..
    .
      

  3.   

    這樣試試
    set ansi_nulls on(off)--兩種都試試
    go
    create proc TrnServer(@aID int,@Bd int)
    AS
    .........
    ........