SQL Query根据Identity列在具有自动插入/更新的服务器之间复制表

时间:2011-08-18 10:38:55

标签: sql-server

假设我有2个服务器,每个服务器有一个相同的表。在每个表中,我都有身份增量(如果你问的话是1),还有'时间'列要记录更新/插入记录的时间。

有点像这样:

ID    Content     Time
1     banana      2011-01-01 09:59:23.000
2     apple       2011-01-02 12:41:01.000
3     pear        2011-04-05 04:05:44.000

我希望定期将这些内容从一个表复制(插入/更新)到另一个表:

一个。仅在某个MONTH之前复制(插入/更新)。即在2011年8月之前。这很容易。

湾只有在记录真的是新的时才插入(可能是因为ID不存在?)

℃。更新如果您发现“时间”列比上次执行的副本更新(基本上这意味着该记录有更新)(我也保存了上次复制的日期/时间)

我可以通过构建程序并按记录检查记录来完成所有这些操作,但是有数十万条记录,它会非常慢。

可以仅使用查询来完成吗?

顺便说一下,我正在使用此查询在服务器之间进行复制,而我正在使用SQL Server 2005

INSERT OPENQUERY(TESTSERVER, 'SELECT * FROM Table1')
SELECT * FROM Table1

thx for da help:)

1 个答案:

答案 0 :(得分:0)

我在这种情况下的策略是:

首先进行外连接,并将数据状态确定为临时表 e.g。

   #temp
   id     state
   1      update
   2      copy
   3      copy
   4      insert

然后运行n个语句将三个表连接在一起,每个状态一个。有时,您可以通过使用正确的键在目标中输入空行来消除多个语句。然后,您只需要进行更复杂的更新/复制。

然而,由于这些是跨服务器 - 我建议采用以下策略 - 将源表完全复制到其他服务器,然后在另一台服务器上执行上述操作。

只有在此之后才进行性能分析以根据需要进行优化。