NPPYQ的学习笔记

每天进步一点点

导航

极度震惊--BizTalk不支持Null值更新


BizTalk居然不能更新Null值,对BizTalk来说是不是个惊天大BUG呢,或许是由于BizTalk有其本身的原因??

问题发现:客户提交一个Bug,反映更新操作时,有些字段不更新.

查找发现,源表SqlServer中某记录只要有字段值为Null,目标Oracle对应记录的对应字段非Null,直接更新时,不会将目标记录的目标字段更新为Null,仍然保留原来的值.

查出真正的问题后,对流程调试跟踪发现,源表中字段只要是Null的,产生的更新消息XML文件中,没有出现该字段的节点,自然也就不会更新了.

居然有这种问题,心里都快崩溃了.重新试了个源表为Oracle目标为SqlServer的流程,问题依然存在.虽然SqlServer的表对应字段在架构中为Element,Oracle的表对应字段在架构中为Attribute,但都会有同样的问题.

BizTalk居然不支持Null的更新,真是匪夷所思,但是既然这已经是既定事实,抱怨也无济于事.想出解决办法才是当前最紧要的.

想到的办法有2种:
第一种,既然Update不支持更新Null,那就不用Update操作了,如果有Update操作,用先Delete后Insert来替换.
第二种,不能更新Null值,其他值总能更新吧,用替代Null的方法,对于字符型,只要是Null,改为空,语句中就是''.

缺点在于:
第一种,用先Delete后Insert来替代Update操作,确实能很好的解决了大部分问题.但是,如果目标表中有些字段很特殊,比如Version是存储反映记录版本的(比如每次该记录有修正,自动增长),先删后插就不能维持一致了.

第二种,用''代替Null,能够勉强解决字符类型(不完全解决,毕竟Null不等于''),但是对于其它类型就不起作用了,比如int不能更新为''吧(结果为0而非Null).







posted on 2008-01-11 14:56  NPPYQ  阅读(1851)  评论(2编辑  收藏  举报