达思科技新版产品详情介绍

DST new product details

修复sql数据库时遇到插入表重复怎么搞?金蝶用友账套里的按钮重复怎么玩儿?

发布时间:2019-05-06    阅读数:

曾经有个达思sql数据库修复软件的用户在恢复用友数据库时,还原到用友环境时,发现菜单重复,一个按钮变出好几个相同的按钮,就像孙悟空拔出毫毛变出好多个小孙悟空,一直在捉弄那个不会处理重复数据的抓耳挠腮的老妖精。本文介绍处理重复数据的处理方法。

一、找出可以插入重复数据的表

use [你要处理的数据库]

-----------------------------------------------------------------------------------

select id,name from sysobjects where id in(

     SELECT object_id FROM sys.indexes where object_id not in(

            SELECT object_id FROM sys.indexes where is_unique=1 or is_primary_key=1 or is_unique_constraint=1)

)  and xtype='U' order by name

-----------------------------------------------------------------------------------

1.jpg

 

再次过滤出哪些表存放有数据

-----------------------------------------------------------------------------------

SELECT object_name (i.id) TableName,

       rows as RowCnt

FROM sysindexes i

INNER JOIN sysObjects o

    ON (o.id = i.id AND o.xType = 'U')

WHERE indid < 2 and RowCnt>0 and i.id in(

 

select id from sysobjects where id in(

     SELECT object_id FROM sys.indexes where object_id not in(

            SELECT object_id FROM sys.indexes where is_unique=1 or is_primary_key=1 or is_unique_constraint=1)

)  and xtype='U'

)

ORDER BY RowCnt desc

-----------------------------------------------------------------------------------

2.jpg

 

二、处理重复数据的表,使相同记录只留一条

案例处理:重复数据处理测试.dbo.UA_Log_Ex 表有记录 520714条

3.jpg

 

去重查询方法:

USE [重复数据处理测试]

GO

-----------------------------------------------------------------------------------

SELECT [cAcc_Id]

      ,[cSub_Id]

      ,[cUser_Id]

      ,[cAuth_Id]

      ,[cStation]

      ,[dInTime]

      ,[dOutTime]

      ,[iLogId]

      ,[iyear]

      ,[Success]     

  FROM 重复数据处理测试.dbo.UA_Log_Ex 

  group by

  [cAcc_Id]

      ,[cSub_Id]

      ,[cUser_Id]

      ,[cAuth_Id]

      ,[cStation]

      ,[dInTime]

      ,[dOutTime]

      ,[iLogId]

      ,[iyear]

      ,[Success]

-----------------------------------------------------------------------------------

把所有字段用group by 就能过滤出唯一的记录


4.jpg


看处理后,记录数量减半,数量为260357条

把过滤后的记录插入一张临时表重复数据处理测试.dbo.TempTable,这个表会自动生成

USE [重复数据处理测试]

GO

-----------------------------------------------------------------------------------

SELECT [cAcc_Id]

      ,[cSub_Id]

      ,[cUser_Id]

      ,[cAuth_Id]

      ,[cStation]

      ,[dInTime]

      ,[dOutTime]

      ,[iLogId]

      ,[iyear]

      ,[Success]

     

   into 重复数据处理测试.dbo.TempTable

  FROM 重复数据处理测试.dbo.UA_Log_Ex

 

  group by

  [cAcc_Id]

      ,[cSub_Id]

      ,[cUser_Id]

      ,[cAuth_Id]

      ,[cStation]

      ,[dInTime]

      ,[dOutTime]

      ,[iLogId]

      ,[iyear]

      ,[Success]

-----------------------------------------------------------------------------------

结果如下

5.jpg

 

最后一步,把原表数据清空,把重复数据处理测试.dbo.TempTable表数据搬回来

delete FROM [重复数据处理测试].[dbo].[UA_Log_Ex]   --删除原表数据


6.jpg


把数据从重复数据处理测试.dbo.TempTable表数据搬回来

insert into [重复数据处理测试].[dbo].[UA_Log_Ex]

SELECT [cAcc_Id]

      ,[cSub_Id]

      ,[cUser_Id]

      ,[cAuth_Id]

      ,[cStation]

      ,[dInTime]

      ,[dOutTime]

      ,[iLogId]

      ,[iyear]

      ,[Success]

  FROM [重复数据处理测试].[dbo].[TempTable]


7.jpg


查看结果:

8.jpg

 

到此就处理结束了


三、总结

1、 过滤重复记录查询用 group by 所有字段

2、 把过滤结果插入新临时表 into  Temptable

3、 清除原表数据 delete from table

4、 把临时表数据搬回原始表,用 insert into 原表


遇到问题,请拨打达思数据恢复中心电话:400-700-0017


  总部:达思凯瑞技术(北京)有限公司

达思数据恢复中心(北京总部):4007000017

地址:中国北京市海淀区林风二路38号院4号楼3层312室(海淀绿地中央广场,北清路与稻香湖路交汇处)

手机导航请搜“达思数据恢复”,跟着导航来达思吧

电话: 010-62672125  62672120   62670165    62672127

达思数据恢复QQ群:120161291   远程支持QQ:151208   

达思软件用户QQ群:327273411(需验证正版信息)

技术:010-62670165 / 数据恢复实验室方案: 13522681842

  达思全国各地服务站:
微信公众号服务号200-200.jpg              

微信服务号


微信公众号订阅号200-200.jpg              

微信订阅号



微信公众号订阅号200-200.jpg              

客户服务

Copyright © 2007 达思凯瑞技术(北京)有限公司  达思科技官网  www.dstfix.com  All rights reserved. ICP备案号:京ICP备09028603号-15

360网站安全检测平台
  • 首页
  • 电话
  • 在线咨询