两表名称为A和B,内容为下图:
需对比的列为:inv_no,wstation_no,st_no,mat_no,p_unit,p_quan,p_weight,avg_cost,p_avg_cost,virt_if,em_if
(其实就是VER_NO,LINE_NO,LINE_ID这三列可以忽略)
条件:
1、mat_no这个列,A表中存在,B表不存在(B表存在而A表不存在)。
可以用两个临时表对比,并且一起显示,如下图。(A表存在,而B表不存在)
2、如A和B表都同时存在相同的MAT_NO,请列出该相同MAT_NO行其他不同的地方,并显示。
注释:
其实就是一个产品的BOM(物料清单),inv_no字段为成品,mat_no字段是材料名称。
问题症结在于,材料可能会随机变动,变动在SQL表里体现的方式是新增或者删除。现在需要将变动前和变动后的数据进行对比,显示出变动的是什么地方。
1、是新增材料还是减少材料,如果是新增的话,是新增了什么东西。(减少亦同)
2、是否修改,修改了哪个字段
恳请各位前辈帮忙,跪谢。
第二个,我的思路是用游标一个一个比对。耗时耗资源也没办法,但是游标我不太会用……
所以上来求助了。
你的意思是用游标把一整笔记录所有字段都取出来,然后当做游标的提取变量进行比对吗。字段少的话还好,多的话就不好用了。
我一般不用游标,需要遍历数据的时候,我都是用While循环,给需要遍历的数据集设定一个RowNumber序号字段,以这个字段做递增循环遍历。
给你一段游标用法参考:
DECLARE UpdateQnty_Cursor_mubiao1 INSENSITIVE CURSOR
FOR select mockOUT,qnty
from #tmpIssueMock
where proccode= @proccode ---定义游标的数据集
OPEN UpdateQnty_Cursor_mubiao1 ---开始游标
BEGIN
FETCH NEXT FROM UpdateQnty_Cursor_mubiao1 INTO @TmpmockOUT,@mockqnty --变量个数与数据集字段数相等
WHILE @@FETCH_STATUS = 0
BEGIN
--
/*游标内语句块 */
--
FETCH NEXT FROM UpdateQnty_Cursor_mubiao1 INTO @TmpmockOUT,@mockqnty --变量个数与数据集字段数相等
END
END
CLOSE UpdateQnty_Cursor_mubiao1
DEALLOCATE UpdateQnty_Cursor_mubiao1
和您说的还是有一点区别,我这个只是单纯的比对变更前和变更后有什么差别,而这个差别又在什么地方。
追答这个交给程序去做记录比较合算.
追问呵呵,我搜索了各种工具,都需要将表导到文本文件进行然后再用软件进行对比。
而实际工作中,太耗费时间了。这样还不如EXCEL直接对比来的快捷。
确实是这样的,如果是有限的工作,不妨换一种思路.你做的非常正确.
追问谢谢您的热心回答,目前我只能做到对比出哪条数据不一样,还是对比不出不相同的那一条数据差异究竟在什么地方。
楼下的朋友也谢谢您了。