一般而言,dw是根据original缓冲区内生成where条件.从以往的资料上来看,有个假定的前提,就是primary区的主键值不修改,而只是修改其他的值,这样,根据original区,会生成update table set .... where 主键=旧值;
现提问题如下: primary区有两条记录 a b
c d (两个字段,其中第一字段,a,c为主键值)
如果在primary区,把数据修改成: e b
f d (就是说可能修改了primary的主健值)
那么按常理逻辑是,根据original区生成语句如下:
update table set 主键=e where 主键=a;
update table set 主键=f where 主键=c;
在下的问题是: 为什么不会生成 update table set 主键=f where 主键=a;
update table set 主键=e where 主键=c;
换句话说,original区的数据是如何与primary区的数据一一对应生成where条件的,因为已经修改了primary区的多条数据的主键值。是不是dw中还
隐藏着其他的技术细节,比如时间戳,或是dw各个缓冲区中的记录有着内部的某种编号?
请各位大侠解释。
(呵呵,这好象是有些深度的问题,百度上都是假定一个条件,主键值不变的情况下。)
------解决方案--------------------
仅仅是根据行的顺序的预感
------解决方案--------------------
where 条件产生是和DW的update属性有关,三种选项,但每项都有主健!
original区和primary区感觉还是通过主健联系的!
primary区可能再带个隐匿主健!但那样和original区又没什么区别了!
也有可能有个内部行号
你可以问问sybase,只有他们能说得清了!
------解决方案--------------------
up
------解决方案--------------------
大家有没有发现这类的函数:
String LName,LName1
LName = dw_employee.GetItemString(3, "emp_name", Primary!, FALSE)
LName1 = dw_employee.GetItemString(3, "emp_name", Primary!, True)
它们能获取数据窗口某项改变前和改变后的值。
这说明数据窗口某处有保存它们的初始值