sqlserver 2005怎样删除数据表中重复的数据

现在正在做一个项目,在测试的时候重复添加到数据库表中很多数据,现在想要重新整理一下数据库,就是把重复的数据删除(当然不是全部删除,而是重复的数据至少要保留一条),该怎么做?
因为有多个表都需要重新整理,无法将表结构都写出来,请大家帮帮忙
唯一的共同点就是,这几张表中都有ID字段是自动增长列,也是主键

第1个回答  2012-08-18
用select Top 1 选择到临时表,清空当前表,再重新初始化自增因子,然后写回!追问

你的意思是再重新添加新的数据吗?还是怎样

追答

比如,你的原始表有100条数据,其中重复的有若干条 表名为SOURCE
你就 Select Top 1 * FROM SOURCE INTO tempdb
DELETE * from Source
into into source select * from Tempdb..
大体就这样吧……。

追问

这个sql语句都是错的,

修改了几次也没有成功,到底是该怎么做啊?

第2个回答  2012-08-18
select 标识列1....等所有你想保存的列 from table1 into tempTable
group by 标识列1..等所有你想保存的列
having count (标识列)>1
--ID除外

delete from table1 where 标识列 in (select 标识列 from tempTable)

insert into table1 (所有列) select 所有列 from tempTable Group by 所有列追问

这个插入不了值啊

我在sql中执行了,报这个错,你帮忙看一下,谢谢了!
(0 行受影响)
消息 544,级别 16,状态 1,第 3 行
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'stu' 中的标识列插入显式值。

追答

不要把ID也加入 标示行,或者,把IDENTITY_INSERT 设置为 ON 时

追问

1>insert into stu (name) select name from stus Group by name就算是我这样写sql语句,也差不进去,虽然不报错,但是还是显示受影响行数为0
2>“把IDENTITY_INSERT 设置为 ON 时" 你说的这句话,应该在哪里设置IDENTITY_INSERT

追答

select name intu tempStus from stus group by name having count(name)>1
这个tempStus表数据库里可以没有,因为这个句子会自动创建
用完此句式记得
drop table tempStus

追问

还是不对啊,想你写的这样是只能插入name的值,id的值就插不进去。当我去添加列名id的时候,就又没有效果了

追答

你的表唯一标识只有id 么?一般来说id是不可更新的,id是一种流水号
最好用别的关键字作为每一行的标识
id 是不可以随便更新的,

本回答被网友采纳
第3个回答  2012-08-20
select distinct * into 新表 from 表
delete from 表
insert into 表 select * from 新表
drop table 新表追问

这样执行出来没效果啊,还是全部的值插入新表

追答

额,你 那些相同的数据 是 每个字段的值都相同么 ,

追问

恩,我知道这种方法了。
不过这种方法是全部的字段相同才可以的,而我的ID字段是自动增长列,不可能相同的

追答

这样呢 

本回答被提问者采纳
相似回答