当前位置: 代码迷 >> PB >> 关于dw的buffer有关问题
  详细解决方案

关于dw的buffer有关问题

热度:106   发布时间:2016-04-29 09:35:24.0
关于dw的buffer问题
一般而言,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)

它们能获取数据窗口某项改变前和改变后的值。

这说明数据窗口某处有保存它们的初始值
  相关解决方案