当前位置: 代码迷 >> Sql Server >> 查寻远程库有而本地库没有的记录
  详细解决方案

查寻远程库有而本地库没有的记录

热度:11   发布时间:2016-04-24 10:16:08.0
查找远程库有而本地库没有的记录
问题:
需要把新记录插入到本地库,所以需要查找远程库有而本地库没有的记录,找到后插入。但是直接执行这样的SQL很慢,本地库和远程库的数据表都要检索一遍,执行完插入需要等几分钟。而且这样处理的数据表不只一个,加在一起,要等十几分钟。

想到的改进办法:
想问一下,如果数据表里添加系统时间,记录每一条记录入库的时间,然后导入的时候以时间为查询条件,把远程库上的新纪录插入到本地数据库。是不是就快了。而且总觉得涉及数据导入导出的表,添加时间列是好事。

还有其他更好的办法使导入更快些吗?
现在把导入新记录到本地库写成存储过程,代理执行作业自动完成;如果手工每天导入就太麻烦了,而且只是导入新记录的话,还是得写SQL。

------解决方案--------------------
记录用 timestamp 作为新旧标记更合适,这设计出来就是给数据同步用的。
SQL Server 帮助:
timestamp
timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。
...
在 CREATE TABLE 或 ALTER TABLE 语句中,不必为 timestamp 数据类型提供列名:

CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)


如果没有提供列名,SQL Server 将生成 timestamp 的列名。...

一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新。这一属性使 timestamp 列不适合作为键使用,尤其是不能作为主键使用。对行的任何更新都会更改 timestamp 值,从而更改键值。如果该列属于主键,那么旧的键值将无效,进而引用该旧值的外键也将不再有效。如果该表在动态游标中引用,则所有更新均会更改游标中行的位置。如果该列属于索引键,则对数据行的所有更新还将导致索引更新。
...
  相关解决方案