在同一台服务器中有两个数据库Database1,Database2
两个数据库中的表结构一模一样,分别在这两个数据库中执行
相同的一条sql语句,Database1执行成功,Database2中竟然出错

Server: Msg 7391, Level 16, State 1, Line 1
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

解决方案 »

  1.   

    insert into   table1(c1,c2)
    SELECT c1,c2
    FROM OPENDATASOURCE ('SQLOLEDB', 
          'Data Source=192.168.0.14;User ID=ww;Password=123456'
           ).test.dbo.test1
      

  2.   

    http://topic.csdn.net/t/20050913/09/4265453.html#
      

  3.   

    SELECT c1,c2
    FROM OPENDATASOURCE ('SQLOLEDB', 
          'Data Source=192.168.0.14;User ID=ww;Password=123456'
           ).test.dbo.test1在两个数据库中都有数据返回的
      

  4.   

    ---lz可以不用OPENDATASOURCE这种方式,用服务器连接可以方便一些。sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
        [ , [ @useself = ] 'useself' ] 
        [ , [ @locallogin = ] 'locallogin' ] 
        [ , [ @rmtuser = ] 'rmtuser' ] 
        [ , [ @rmtpassword = ] 'rmtpassword' ]
      

  5.   

    http://topic.csdn.net/t/20050913/09/4265453.html#
      

  6.   

    找到原因了:Database2中的table1多了个TRIGGER 
    FOR INSERT
    虽然这个TRIGGER 只是 print 'test' 一条语句,但是还是出错了
      

  7.   

    INSERT类的TRIGGER 加上就出错