可能我前面描述不太清楚,我重说一下
我要Insert本地表table1,tabel1上做了个Insert的远程触发,插入记录到远程数据库的tabel2中,现在的问题是,如果网络不通,则tabel1是不能insert数据的。
楼上的几位说的好像都不行,因为远程触发是个分布式事务,如果不成功则会回滚的,本地的insert也不能完成的。
我要Insert本地表table1,tabel1上做了个Insert的远程触发,插入记录到远程数据库的tabel2中,现在的问题是,如果网络不通,则tabel1是不能insert数据的。
楼上的几位说的好像都不行,因为远程触发是个分布式事务,如果不成功则会回滚的,本地的insert也不能完成的。
如果事务中存取多个数据库服务器中的数据(包括执行存储过程),那么就必须使用“分布式事务”(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' --这个允许调用链接服务器上的存储过程
create trigger trig_table1_insert on table1
instead of insert
as
insert table1 select * from inserted
commit tran
--下面写向远程数据库更新数据的,不行的话把commit tran去掉试试。
1、如果用insead of insert 的话,那本地没有执行Insert,这不符合我的要求啊
2、分布式事务如果去掉最后的commit tran会报错的,在任何时候都不能远程触发。