k*z 发帖数: 4704 | 1 我的DB2源表是一个逻辑表,就是已经算好了很多东西给前台用的一个逻辑表。例如时
间已经被拆分成了 Year, Month, Day,
这个源表是只增加,不更新,不删除的,我只要担心怎么插入就可以了,不用考虑更新
和删除。
现在我要把这个表每天进行一次同步,拷贝到SQL2012里面去做Report.
我目前的思路是:
先把目标表的最大日期取出来, maxdate。
Table Input:
select max(year*10000+month*100+day) as maxdate
from target_table
如果maxdate是空值,那么进行全表拷贝。(基本就是第一次更新有用,其他时候表都
有最大值的)
如果maxdate不是空值,那么把这个最大日期的天数的数据在目标表删除 (因为有可能
上次更新的时候这个最大的日期的数据还不完全)
从源表把需要更新的数据读取出来,这里有两个思路
1. 取所有大于maxdate的数据,然后更新 (有可能导入明天和后天的值)
1. 只取 maxdate 和 today()的值。 (当天的数据有可能是全的,有可能是不全的)
把这个取出来的数据插入到目标表。
最后考虑在目标表增加一列,YearMonthDate=Year*1000+month*100+day, 这样就不用
每次都计算了。
因为我的权限有限,而且也不是DBA, 不能对源表进行任何设置和更改,不能用触发器
或者日志的方式更新,目前只想到了这个方法。
求大牛指点一下,怎么实现,怎么优化。 | k*z 发帖数: 4704 | 2 例如:
下面两个用哪个?
SELECT *
FROM SFPASD
WHERE (YEARAD*10000+MONTAD*100+"DAY#AD") > ?
SELECT *
FROM SFPASD
WHERE YEARAD> ? AND MONTAD > ? AND "DAY#AD" > ? |
|