存储过程如何实现(两台服务器)间的两个数据库(SQL)表的对拷?(100分)

  • 主题发起人 主题发起人 21ddn.com
  • 开始时间 开始时间
2

21ddn.com

Unregistered / Unconfirmed
GUEST, unregistred user!
在服务器A与服务器B中分别存放着数据库myconn,数据库名和表名表结构全部一致.我现在要把A服务器数据库myconn里的表(systable)中的记录拷到B服务器数据库myconn中的表(systable)里去,如何实现?<br>直接写存储过程能实现吗?
 
用链接服务器实现
 
强烈关注。。。。。
 
看需求如何了,如果只是靠数据<br>有个方法,不过数据多了,速度可能不行<br><br>insert into b.myconn.systable (select * &nbsp;from a.myconn.systable where (需有个条件判断,确保数据在B上不存在))<br><br>若B中的数据总是和A中的相等,不会比A中的多<br>可以这样<br>drop B.myconn.systable<br>go<br>select * into b.myconn.systable from a.myconn.systable
 
给每条数据插入个识别码,这个识别码必须是唯一的。<br>然后本机数据字段里加一个标记是否同步的字段。<br>然后循环,查询的时候可以只差识别码和是否同步。<br>如果A数据库的标记是“未同步”,就上传到B。相反也一样。<br>上传后标记为“已同步”。<br>我就是这样做的,不能删除数据,只可作废数据就可以了,加个标记为作废数据。<br>如果要删除就加标记同步后再同时删除。<br><br>我就是这样做的,不知道对你有没有用。
 
DTS可以实现,速度很快。
 
这样不就是实现了,关系数据库的复制功能了吗?厉害啊!国产数据库有哪些?
 
用快照复制或者事务日志复制
 
DTS好用!简单!SQL自动生成代码。写存储过程麻烦!易出错!
 
这样可以<br>&nbsp;if &nbsp; exists(select &nbsp; 1 &nbsp; from &nbsp; master..sysservers &nbsp; where &nbsp; srvname='srv_lnk') &nbsp; &nbsp; <br>&nbsp; exec &nbsp; sp_dropserver &nbsp; 'srv_lnk','droplogins' &nbsp; &nbsp; <br>&nbsp; go &nbsp; &nbsp; <br>exec &nbsp; sp_addlinkedserver &nbsp; &nbsp; 'srv_lnk','','SQLOLEDB','DATASERVER' &nbsp; <br>&nbsp; exec &nbsp; sp_addlinkedsrvlogin &nbsp; 'srv_lnk','false',null,'usrname','pwd' &nbsp; <br>&nbsp; go &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; --查询示例 &nbsp; <br>&nbsp; select * into dbo.mz_patient &nbsp; from &nbsp; srv_lnk.dbname.dbo.tblname
 
你的问题有两种方法可以实现:<br>1、静态数据同步:通过A备份然后在B还原<br>2、动态数据同步:A启用触发器,B启用MDTS
 
将 OPENROWSET 用于 SELECT 和 SQL 本机客户端 OLE DB 访问接口:<br>INSERT INTO myTable(....)<br>SELECT a.* FROM OPENROWSET('SQLOLEDB','资料来源机器名';'sa';'密码', 'SELECT * FROM DatabaseName.dbo.TableName') AS a <br><br>须打开选项 sp_configure 'Ad Hoc Distributed Queries','1'
 
动态数据同步:A启用触发器,B启用MDTS<br>怎样实现????
 
就是在A这边的表上写个在插入,更新,删除时做过触发器。B启用MDTS你上网查sql server2000数据库分发复制就知道了
 
1.分发服务器,<br>2.自己写拷贝程序<br>3.客户端分别连接2服务器,传输,可以事务控制
 
后退
顶部