本帖最后由 cege 于 2009-11-16 11:23 编辑
有时添加新装备时,不注意将已有的物品加入ITEM表后,出现物品冲不了的错误,终于找到了解决方法:
原来是数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……
此SQL句可查出ITEM是否有重复行和重复的次数:
select NUM,count(*) from ITEM group by NUM having count(*) > 1
查出来竟然上千条重复记录{:1_214:}
如果有,我们希望删除重复行,以减小数据库的大小,提高系统效率,减少错误。
但是有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如NUM字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用:
以下为引用的内容:
select distinct * from ITEM
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除(请执行前保存备份,以防误删除)
以下为引用的内容:
select distinct * into #Tmp from ITEM
drop table ITEM
select * into ITEM from #Tmp
drop table #Tmp
增加唯一索引列即可解决重复问题,但是对于增加唯一索引慎重考虑,不建议对ITEM表设置索引。
2、对于第2种重复,这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为NUM,可能strName列既有英文也有中文,要求得到NUM字段唯一的结果集
以下为引用的内容:
select identity(int,1,1) as autoID, * into #Tmp from item
drop table ITEM
select min(autoID) as autoID into #Tmp2 from #Tmp group by Num
select * into ITEM from #Tmp where autoID in(select autoID from #tmp2)
drop table #Tmp
drop table #Tmp2
alter table ITEM drop column autoID
即得到了NUM不重复的ITEM新表。 |