1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > sql数据库修复技巧:用达思sql数据库修复软件时表重复怎么搞办?

sql数据库修复技巧:用达思sql数据库修复软件时表重复怎么搞办?

时间:2018-11-01 06:34:04

相关推荐

sql数据库修复技巧:用达思sql数据库修复软件时表重复怎么搞办?

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

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

use[你要处理的数据库]

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

selectid,namefromsysobjectswhereidin(

SELECTobject_idFROMsys.indexeswhereobject_idnotin(

SELECTobject_idFROMsys.indexeswhereis_unique=1oris_primary_key=1oris_unique_constraint=1)

)andxtype='U'orderbyname

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

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

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

SELECTobject_name(i.id)TableName,

rowsasRowCnt

FROMsysindexesi

INNERJOINsysObjectso

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

WHEREindid<2andRowCnt>0andi.idin(

selectidfromsysobjectswhereidin(

SELECTobject_idFROMsys.indexeswhereobject_idnotin(

SELECTobject_idFROMsys.indexeswhereis_unique=1oris_primary_key=1oris_unique_constraint=1)

)andxtype='U'

)

ORDERBYRowCntdesc

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

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

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

去重查询方法:

USE[重复数据处理测试]

GO

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

SELECT[cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

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

groupby

[cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

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

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

看处理后,记录数量减半,数量为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

groupby

[cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

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

结果如下

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

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

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

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

SELECT[cAcc_Id]

,[cSub_Id]

,[cUser_Id]

,[cAuth_Id]

,[cStation]

,[dInTime]

,[dOutTime]

,[iLogId]

,[iyear]

,[Success]

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

查看结果:

到此就处理结束了

三、总结

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

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

3、 清除原表数据 delete from table

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。