^^^^关于增量更新的判断^^^^
A服务器上有一个数据库aa,B服务器上有一个数据库bb,bb实际上是定期从aa导来的。 
 现在的问题是,我想做一个调度来每月将aa中的某个表中改变(update的或者insert的)的纪录导到bb中,我在写脚本的时候,怎么来判断aa中的这个表的哪纪录是我需要的呢? 
 (不要用触发器)
------解决方案--------------------在aa表上添加一個時間字段,紀錄 update insert 時的時間,然後根據這個時間來抓數據
------解决方案--------------------不能用触发器就只能加个最后更新时间字段在aa库的每个表,记录最后修改时间,可以default(getdate()),这样插入的时候能自动取得时间 
------解决方案--------------------在表中增加一个列updatetime,在做update或insert时记录下时间,导的时候就可以参照updatetime里的时间了 
------解决方案--------------------  --新增 
 insert into bb.tablename 
 select * from 
  OPENDATASOURCE( 'SQLOLEDB ',   
           'Data Source=.;User ID=sa;Password=sa '   
          ).aa.dbo.tablename A 
 where not exists (select * from bb.tablename where 主鍵=A.主鍵)   
 --更新 
 update A set FieldName=B.FieldName from bb.tablename A, OPENDATASOURCE( 'SQLOLEDB ',   
           'Data Source=.;User ID=sa;Password=sa '   
          ).aa.dbo.tablename B 
 where A.主鍵=B.主鍵 and A.FieldName <> B.FieldName
------解决方案--------------------不改變當前表的結構,可不可以另外添加一個日志表. 
 專門紀錄對這個表的操作歷史,時間,更新/insert 的key值 
 結構: 
 tablename  caozuo   key   time 
  aa         add      1    20070712 
  aa         update   2    20070821 
 然後根據這個time 和 key值到aa裡抓數據 to bb表
------解决方案--------------------按楼主的要求,实现不了。 
 不用任何附加字段或表,就只能遍历两表求差,这样的在倒数据的时候负载最高,平时无任何影响。 
 通过添加timestamp字段、datetime字段或者用触发器生成增量表的方式,对于平时的负载,影响很小(当然要看每次数据更新的数据量,通常前台操作都是单记录更新,影响微乎其微),而倒数据时的负载,根据所用方法的不同,有所差异,但一定要比两表求差的负载小得多。如果通过更改表结构来增加timestamp或datetime字段,在倒表的时候需要在整表空间内作数据过滤,即便在有索引的情况下,负载也不小;如果使用增量表,倒数据时仅需对增量表进行查询,如果每次成功倒完后都清理增量表,那么查询是不需要条件的,而且数据量相对很小,应当比较可行。 
 请楼主参考。
------解决方案--------------------试下用P2P的MD5较验技术.适用于远程2地文件对比更新. 
 它的精髓如下: 
 100M的文件,生成一个文件大小和MD5码. 
 远程对比大小,符合就再对这个MD5码. 
 如果不符合,继续传送文件; 
 远程不符合的文件继续更新数据. 
 把100M的文件分成2段,每段50M,生成2个MD5码,再交给远程对比. 
 不符合,再分4段,不符合再分8段.再分16段.....可能分到最小的时候,每10K或100K形成1个MD5窜.   
 当然,你也可以返过来,先直接每100K或10K数据,拆一个MD5码,然后把它们打包传送到远程对比.     
 根据这个原理,你也可以在2地数据间,用这种方法进行. 
 比如先取原表50条记录(只取关键部份,一定需要的),然后把它们拼起来,MD5一次,交给远程,远程也取这50条记录(也只取关键部份,一定需要的)也MD5一次,对得上则OK.对不上,再分条传送对比吧...