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

两台数据库服务器之间表中数据定时导入
两台数据库服务器之间表中数据定时导入:

1 生产主机GGJBHT 上的thdata表 定时 往备份机的thdata表中传入数据,用下列方式已创立好连接服务器

EXEC sp_addlinkedserver
  @server='DBVIP',-- 被访问的服务器别名
  @srvproduct='',
  @provider='SQLOLEDB',
  @datasrc='192.168.1.10' --要访问的服务器
 
EXEC sp_addlinkedsrvlogin
  'DBVIP', -- 被访问的服务器别名
  'false',
  NULL,
  'sa', --帐号
  '010' --密码

生产机THDATA表中ID在备份机thdata中没有则就导入,
采取这种思路写入下列代码:

INSERT INTO thdata as a  
SELECT * from DBVIP.GGJBHT.dbo.thdata as b
where b.ID > a.ID 
运行不能通过,怎么写呢?

有别的方式可以实现吗?


------解决方案--------------------
SQL code
INSERT INTO  a   
SELECT b.* from thdata as a, DBVIP.GGJBHT.dbo.thdata as b
where b.ID > a.ID

------解决方案--------------------
SQL code
INSERT INTO  a   
SELECT b.* from thdata as b, DBVIP.GGJBHT.dbo.thdata as a
where b.ID > a.ID

------解决方案--------------------
探讨

报错,如下:
消息 208,级别 16,状态 1,第 1 行
对象名 'a' 无效。

------解决方案--------------------
sql 2005以上的话 就用merge
merge需要定义目标表和源表 然后判断
如果目标表有 源表没有 如何如何 等等
具体可以网上搜索一下merge的语法
------解决方案--------------------
INSERT INTO thdata /*你要插入的所在服务器上的数据库*/
SELECT b.* from thdata as b, DBVIP.GGJBHT.dbo.thdata as a
where b.ID > a.ID

------解决方案--------------------
如果数据量小,能完成任务即可。。如果数据量大,要注意性能和技巧
------解决方案--------------------
[color=#FF0000]
SQL code

INSERT INTO thdata   
SELECT b.* from thdata as a, DBVIP.GGJBHT.dbo.thdata as b
where b.ID > a.ID