日期:2014-05-18  浏览次数:20642 次

insert时数据丢失,好奇怪
把A中的数据全部插入到log表中,然后经过对数据的分解再全部插入B表中,这两个过程在一个事务里,没有用游标。现在的问题是B表中数据经常比log表中的数据要少,但我在测试的时候没有这样的问题,出了问题我又测了好几遍还是没问题。大家帮忙想一下有可能是什么原因引起的呢。

------解决方案--------------------
把A中的数据全部插入到log表中,然后经过对数据的分解再全部插入B表中,这两个过程在一个事务里,没有用游标。现在的问题是B表中数据经常比log表中的数据要少,但我在测试的时候没有这样的问题,出了问题我又测了好几遍还是没问题。大家帮忙想一下有可能是什么原因引起的呢。
----------------------------
把A中的数据全部插入到log表中,然后经过对数据的分解再全部插入B表中?
后面那步没有必要啊?既然是全部插入,直接插入B表,然后在分析就行了.不必使用LOG这个中间表.
------解决方案--------------------
分解过程是不是有逻辑上问题?
------解决方案--------------------
A 备份 -> log
A 分解 -> B
--------------------
不了解分解过程如何,个人认为很可能分解时 NULL 值的问题。
------解决方案--------------------
log表还没清空就insert了吧
------解决方案--------------------
分解过程上有没有用到
Set ANSI_NULLS ---ON/OFF
------解决方案--------------------
不了解分解过程如何,个人认为很可能分解时 NULL 值的问题。
===============================
就是把一个条形码分解出来,的确有些字段是空的,为什么空的会出问题呢

--------------------------
那就用几条NULL值得记录分解试试,看看是不是这个问题,是这个问题再深入分解逻辑,不是就没必要了。
------解决方案--------------------
把你的处理过程贴出来,看看是否存在问题。
------解决方案--------------------
对比一下你的数据看下少了哪些数据

看下这些数据有什么特点就知道了
------解决方案--------------------
是不是和实际运行中的B表的约束有关,导致某些数据插不入?

------解决方案--------------------
关注~
------解决方案--------------------
学习
------解决方案--------------------
要是哪位达人能帮忙找出问题所在,分不是问题啊
------------------------------------------------
分确实不是问题,汗~~~
但是累人哦,我看看代码先,那么长~~~~~~~
------解决方案--------------------
哇噻,你太有才了!!!三层CASE在嵌套!

你这天书SQL,没有时间去详细分析,不过有三点需要改善:
1, 用Substring(Maincd,2,14) 代替RIGHT(LEFT(Maincd,16),14)
2, 使用coalesce代替繁琐的case嵌套
3, 定义字段时别偷懒,字段Maincd和SubCD定义的极不合理

------解决方案--------------------
处理过程貌似没有问题,看不出问题在哪。
不过你能不能先把数据导入,然后再UPDATE,在UPDATE过程再进行你的那些转换逻辑。
估计是在转换过程中丢掉数据的。
------解决方案--------------------