可能我前面描述不太清楚,我重说一下
我要Insert本地表table1,tabel1上做了个Insert的远程触发,插入记录到远程数据库的tabel2中,现在的问题是,如果网络不通,则tabel1是不能insert数据的。
楼上的几位说的好像都不行,因为远程触发是个分布式事务,如果不成功则会回滚的,本地的insert也不能完成的。

解决方案 »

  1.   

    分布式事务
    如果事务中存取多个数据库服务器中的数据(包括执行存储过程),那么就必须使用“分布式事务”(Distributed Transaction)。
    此时,由于工作必须分散到多个服务器中进行,必须有一个协调者来负责统筹整个事务的管理工作,而它就是MSDTC(Microsoft Distributed Transaction Coordinator)。MSDTC 服务可以在SQLSERVER的服务管理器中启动,也可以企业管理中启动。
    除了MSDTC 要启动外,还要创建链接服务器 :
    exec sp_addlinkedserver  'server_lnk','','SQLOLEDB','远程服务器名或ip地址'
    exec sp_addlinkedsrvlogin ' server _lnk','false',null,'用户名','密码'
    exec sp_serveroption ' server _lnk','rpc out','true' --这个允许调用链接服务器上的存储过程
      

  2.   

    分布式事务我明白,我现在就是采用的分布式事务,现在的问题是,比如网络不通,那么远程的insert是不能执行成功的,但是此时本地的insert也会因为回滚而不能insert,但是设计要求,本地的数据库必须能insert数据,所以不知道该怎么处理
      

  3.   

    --用instead of insert 触发器试试
    create trigger trig_table1_insert on table1
    instead of insert 
    as
    insert table1 select * from inserted
    commit tran
    --下面写向远程数据库更新数据的,不行的话把commit tran去掉试试。
      

  4.   

    谢谢楼上兄弟的参与。但是
    1、如果用insead of insert 的话,那本地没有执行Insert,这不符合我的要求啊
    2、分布式事务如果去掉最后的commit tran会报错的,在任何时候都不能远程触发。
      

  5.   

    哦,刚才我没看清sdhdy的方法,现在看明白了,试试