192.168.0.1上,打开企业管理器 -> (local)(Windows NT) -> 安全性 -> 连接服务器 -> 右键 -> 新建连接服务器 -> 常规 -> 连接服务器:Link2 -> 其它数据源 -> Microsoft OLE DB Provider for SQL Server -> 数据源:192.168.0.2(也可用机器名) -> 安全性 -> 用此安全上下文进行 -> 输入远程登录用户名和密码。然后我在192.168.0.1的A表上做了个触发器,判断如果A表有新记录,则把新记录插入192.168.0.2上的一个表B里(怎么判断是新记录?表A里以前有很多数据。)但是我测试,insert 一条语句后,就提示出错:
---------------------------------------------------------------
服务器: 消息 8501,级别 16,状态 3,过程 Checks,行 5
服务器 'NMCOVICS-0076' 上的 MSDTC 不可用。
这个是什么错误!!?
------------------------------------------------------------------1,我用触发器的时候怎么能光把新插入的记录拿到B表里?
2,这个错误怎么解决!Help!!!

解决方案 »

  1.   

    create   trigger   t_test   on   test   
      for   insert   
      as   
      set   XACT_ABORT   on   
      --启动远程服务器的MSDTC服务   
      exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output   
        
      --启动本机的MSDTC服务   
      exec   master..xp_cmdshell   'net   start   msdtc',no_output   
        
      --进行分布事务处理,如果表用标识列做主键,用下面的方法   
      BEGIN   DISTRIBUTED   TRANSACTION   
      delete   from   openrowset('sqloledb','xz';'sa';'',test.dbo.test)   
      where   id   in(select   id   from   inserted)   
      
      commit   tran   
      go
      

  2.   

    http://topic.csdn.net/t/20060523/11/4771841.html
    lz根据你的情况修改一下就可以了
      

  3.   

    控制面板-管理工具-服务 
    将这个DTC服务打开
    Distributed Transaction Coordinator这个服务是进行分布式事务必备的
      

  4.   

    simonhehe(收购猩猩) 大哥,我还是不明白!
    我要把我机器(IP是1)的一个表A里的新记录,插入表B里(IP是2)!表A的数据不可以删除。表A和表B的结构不同,A里有N个字段,其中一个字段表示内容B表就一个字段内容另外提示MSDTC连接失败。
    麻烦你把完整代码写下好么,多谢!很急,没时间研究着搞了,多谢!!!
      

  5.   

    To : hb_gx(高升) 
    我把服务器两边的Distributed Transaction Coordinator服务都打开了!
    ----------------------------------------------
    服务器: 消息 7391,级别 16,状态 1,过程 Checks,行 5
    该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
    [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
    OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
    -------------------------------------
      

  6.   

    不知道你两边的服务器是什么版本还有你SqlServer的版本,SQLOLEDB 这个接口对Sql2000都是支持的你是不是用的Sql2005,如果是Sql2005用 SQLNCLI 接口
      

  7.   

    一个是XP+SQL2000SP4,另外一个是WIN2000+SQL2000SP4我把服务器两边的Distributed Transaction Coordinator服务都打开了!并且把exec   master..xp_cmdshell   'net   start   msdtc',no_output  分别在两个机器上运行的。而且两边都是MCAFEE杀毒软件关闭了。没有防火墙!触发器的代码:
    ----------------------------------------
    CREATE TRIGGER [Checks] ON [dbo].[pushmsg] 
    after INSERT
    AS
    set nocount on
    insert into link1.emoasp.dbo.pushmsg (PhoneNumber,Msg)
    select PhoneNumber,Msg from pushmsg where left(PhoneNumber,3) in ('134','135','136','137','138','139','158','159') 
    set nocount off
    -----------------------------------------------------------
      

  8.   

    我已经建立了连接LINK1
    我要的结果是:link1.emoasp.dbo.pushmsg 如果有新数据近来,则把新数据插入本地的pushmsg 表里。两个pushmsg表都有个特点,就是里面的数据每隔几秒就会被删除掉,里面3个字段,其中有个ID字段是自动增量麻烦高手帮忙了!实在搞不出来了,一个是如何只插新数据的问题,另外一个是如何建立连接。很奇怪的,我直接在查询分析器里写
    insert into link1.emoasp.dbo.pushmsg (PhoneNumber,Msg)
    select PhoneNumber,Msg from pushmsg where left(PhoneNumber,3) in ('134','135','136','137','138','139','158','159') 就是对的,放到触发器里就提示错误!错误内容就是:
    ----------------------------------------------
    服务器: 消息 7391,级别 16,状态 1,过程 Checks,行 5
    该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
    [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
    OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
    -------------------------------------
      

  9.   

    XP我没用过,不知道上面能不能用DTC服务,刚才问了几个有用过XP的说,分布式不能在XP上用,也不知道是不是真的,你的SqlServer版本没有问题,应该是XP的问题
    触发器跟你改一下,你自己看看,你只是需要新插入的数据,并不是要所有的数据CREATE TRIGGER [Checks] ON [dbo].[pushmsg] 
    after INSERT
    AS
    set nocount on
    insert into link1.emoasp.dbo.pushmsg (PhoneNumber,Msg)
    select PhoneNumber,Msg from INSERTED
    set nocount off
      

  10.   

    我明天找两个 Win2000的机器试!大哥我今天就不结帖子了,明天早上你一定要看一下这个帖子啊,我可能还有问题要问你,帮忙了!分肯定给你了,多谢多谢!