典型的全表比对的方式是采用MD5校验码。ETL工具事先为要抽取的表建立一个结构类似的MD5临时表,该临时表记录源表主键以及根据所有字段的数据计算出来的MD5校验码。每次进行数据抽取时,对源表和MD5临时表进行MD5校验码的比对,从而决定源表中的数据是新增、修改还是删除,同时更新MD5校验码。
这是全表对比方式的原理。
现在遇到问题如下
//获得源表主键字符串(每个主键之间加字符‘&’),getKeystr是自己定义的方法
String tableid = getKeystr(orgtable);
//这是从源表中选出新增数据,orgtable是源表,tempid是临时表主键(即源表主键字符串),temptable是临时表(包含tempid和MD5校验码)
String sqlstr = "select * from "+orgtable+" where "+tableid+" not in(select tempid from "+temptable+")";
现在遇到的问题是,tableid是主键字符串,而源表orgtable中并不存在这个字段,该如何做才能 选出 在源表而不在临时表的记录?
------解决方案--------------------------------------------------------
这么做效率也未免太低了吧
oracle的话,可以用物化视图的方式解决,SQL server不太清楚