2014年之后的版本更改了成长套系的存储方式,造成的问题解决.sql 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. --2014年之前的版本,在后来版本中由于更改了数据库的存取方式导致 成长套系出问题:
  2. --现象:
  3. --订单修改中,成长套系的套系产品中的入册入底基本上看不到,不仅仅入册入底,还有其他的商品也显示不出来。
  4. --出现问题的影楼:格林儿童专业摄影机构-新城区新华大街20号
  5. --产生的原因:
  6. --之前的版本,若有多个成长套系,某些商品(包含入底入册)可以选择"全部"成长套系都包含,dindansp表中growthtxname='全部',表示该商品为所有成长所有;
  7. --后来的版本,dindansp表中每个商品不再使用growthtxname='全部'这种方式存储,而是一一对应某个成长套系.
  8. --解决方案:
  9. --1.将之前包含growthtxname='全部'的dindansp记录删除,重新创建每个成长套系对应的商品记录;
  10. --2.有些dindansp的记录虽然包含'全部',但是经查询发现该订单的其他的商品套系名称全为空,反映出并不是所有包含'全部'的都是成长套系订单;
  11. --这部分记录要过滤.
  12. --解决过程:
  13. --1.获取出dindansp中成长套系名称为"全部"的商品和订单;
  14. use db
  15. select id,spid,name,growthtxname from dindansp where growthtxname = '全部' order by id
  16. go
  17. --2.获取这些订单的成长套系数量及名称;
  18. use db
  19. select id,spid,name,growthtxname from dindansp where id in(select id from dindansp where growthtxname = '全部') order by id
  20. go
  21. --3.将包含'全部'但不包含'第一次'\'第二次'之类的订单更新为空;
  22. use db
  23. select id,spid,name,growthtxname from dindansp where id in(select id from dindansp where growthtxname = '全部')
  24. and growthtxname<>'第一次' and growthtxname<>'第二次'
  25. and growthtxname<>'第三次' and growthtxname<>'第四次'
  26. and growthtxname<>'第五次' and growthtxname<>'第六次'
  27. and growthtxname<>'第七次' and growthtxname<>'第八次'
  28. and growthtxname<>'第九次' and growthtxname<>'第十次'
  29. order by id
  30. go
  31. --备份.
  32. select * into dindansp# from dindansp
  33. go
  34. /* 将备份回转原表;
  35. truncate table dindansp
  36. insert into dindansp select [id],[spid],[shuliang],[kind],[price],[name],[no],[status1],[status2],[status3],[status4]
  37. ,[date1],[date2],[date3],[date4],[name1],[name2],[name3],[name4],[hqdate],[hqtime],[urgent],[taketime],[no2]
  38. ,[growthtxname],[status5],[status6],[date5],[date6],[name5],[name6],[ps],[zs],[ren1],[ren2],[hqstatus],[bz]
  39. from dindansp#
  40. */
  41. --更新这些记录,但除去入册和入底的;
  42. update dindansp set growthtxname=NULL where id in(select id from dindansp where growthtxname = '全部')
  43. and growthtxname not in('第一次','第二次','第三次','第四次','第五次','第六次','第七次','第八次','第九次','第十次')
  44. and name not in('入册','入底')
  45. go
  46. --若只有入底与入册,同样也需要更新;
  47. --4.将包含'全部'但不包含'第一次'\'第二次'之类的订单过滤,余下的就是真正的成长套系订单商品记录;
  48. use db
  49. select id,spid,name,growthtxname from dindansp where id in(select id from dindansp where growthtxname = '全部') and
  50. growthtxname in('第一次','第二次','第三次','第四次','第五次','第六次','第七次','第八次','第九次','第十次')
  51. order by id
  52. go
  53. declare @size int --查询数量;
  54. declare @ord nvarchar(50) --订单号;
  55. declare @spname nvarchar(50) --商品名;
  56. declare @gname nvarchar(50) --成长套系名称;
  57. --,@ord=id,@spname=name,@gname=growthtxname
  58. select @size=count(id) from dindansp where id in(select id from dindansp where growthtxname = '全部') and
  59. growthtxname in('第一次','第二次','第三次','第四次','第五次','第六次','第七次','第八次','第九次','第十次')
  60. while @size > 0
  61. begin
  62. select top 1 percent @ord=id,@spname=name,@gname=growthtxname from dindansp where id
  63. in(select id from dindansp where growthtxname = '全部')
  64. and growthtxname in('第一次','第二次','第三次','第四次','第五次','第六次','第七次','第八次','第九次','第十次')
  65. if
  66. end
  67. select distinct growthtxname from dindansp where id in(select id from dindansp where growthtxname = '全部') and
  68. growthtxname in('第一次','第二次','第三次','第四次','第五次','第六次','第七次','第八次','第九次','第十次')
  69. order by growthtxname