日期:2014-05-18  浏览次数:20568 次

触发器+链接
我的需求:实时监视数据库其中一张表的插入和更新操作,同步到另外一台服务器的同名表中。



在网上找了点资料,最后确定用触发器+链接外服务器的方法。现在有个问题,我是用OPENROWSET链接插入、更新操作的。语句在查询窗口能执行,单独写个存储过程也能执行,就是写到触发器中无法执行,提示链接服务器没有启用分布式事务,莫名其妙,同一语句明明在查询窗口和存储过程都能执行的,应该不是服务器设置问题吧。


由于是小白,特来麻烦各位大侠点化点化一下,谢谢!


------解决方案--------------------
你用存储过程不行吗? 加SQL作业!
------解决方案--------------------
创建链接服务器无法使用事务,触发器会启用一个事务,建议楼主使用同步复制技术。
http://topic.csdn.net/u/20080523/11/08e4624a-13d1-4a6c-a9bc-7cfdd721a351.html
------解决方案--------------------
要先开始一个分布式事务
BEGIN DISTRIBUTED TRANSACTION;

------解决方案--------------------
SQL code
exec sp_addlinkedserver ...
exec sp_addlinkedsrvlogin ...

------解决方案--------------------
链接服务器需要启用远程分页式服务远程连上去,或者telnet登陆上去 
然后运行net start msdtc命令
------解决方案--------------------
http://topic.csdn.net/u/20081231/10/624c68b9-e9b6-4c01-910f-c116bdd14c63.html?2546
------解决方案--------------------
http://topic.csdn.net/t/20050105/09/3699836.html
------解决方案--------------------
探讨
引用:

http://topic.csdn.net/u/20081231/10/624c68b9-e9b6-4c01-910f-c116bdd14c63.html?2546


谢谢你给的链接。我是想问问,我这个需求,照这个触发器思路能不能事先。如果可以的话,应该是某个基础知识我不懂,照成其他地方能执行,触发器无法执行。感谢指点。

------解决方案--------------------
建议LZ在问问题的时候去看下以前的帖子。
------解决方案--------------------
SET ANSI_WARNINGS ON
SET ANSI_NULLS ON
SET XACT_ABORT ON
---执行更新
SET XACT_ABORT OFF
------解决方案--------------------
SET ANSI_WARNINGS ON
SET ANSI_NULLS ON
SET XACT_ABORT ON
---执行更新(不用OPENROWSET试试)
update 链接服务器名.数据库名.dbo.table_name
where ........

SET XACT_ABORT OFF
------解决方案--------------------
-- 你就启用一下服务器的分布式事务呗!

http://topic.csdn.net/u/20100610/17/66fadf93-b284-403b-af27-cae49fdbd840.html
------解决方案--------------------
Mark下

建议:
1、在本地加表
2、本地加触发器,写入本地新加表
3、加存储过程,实现将本地新加表数据更新到远程,并删除本地数据
4、加作业,定时调用3建立的存储过程