日期:2014-05-17  浏览次数:20469 次

sqlserver2005 表中有两条完全相同的记录,如何删除这两条记录
sqlserver2005 表中没有设置主键,
但有两条完全相同的记录,想删除其中一条,不能删除,这两条记录都不能删除
如何删除这两条记录
------最佳解决方案--------------------
先增加一自动递增的标识列,再删除其中一行,再删除标识列
------其他解决方案--------------------
没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:

delete from 
(
select *,ps=row_number()over(order by getdate())
from table
where id='重复记录的那个id'
) a
where a.ps=2

------其他解决方案--------------------
delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps<>1

删除多条重复,只留下一条
------其他解决方案--------------------
yes  delete  其中1条
------其他解决方案--------------------
用distinct的方法,把所有数据查出来(此时已经是唯一了),插入一个临时表。然后truancate源表,再把临时表的数据插回来,最后建议建立一个主键或者自增ID.
------其他解决方案--------------------
引用:
没有看明白你的详细意思,不过按照我的理解。假如是删除两条记录的其中一条的话,你可以这样:


SQL code?



12345678

delete from ( select *,ps=row_number()over(order by getdate()) from tablewhere id='重复记录的那个id') a where a.ps=2

这个不行啊。有语法错误
------其他解决方案--------------------
楼主的意思是两条完全相同的记录,但是没有标识列,怎么删除,如果有id就好办了,
name  age
test  22
test  22
------其他解决方案--------------------
都没有看懂楼主的意思么?

有两条完全相同的记录,想删除其中一条,不能删除,这两条记录都不能删除
如何删除这两条记录 


这句话什么逻辑?
------其他解决方案--------------------
如果是两条相同记录,没有主键。不能同时删除这两条记录,必须保留一条,那么用楼上DBA的方法。
------其他解决方案--------------------
select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp
------其他解决方案--------------------
建立一个临时表过渡一下

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp1

------其他解决方案--------------------
该回复于2012-11-26 14:27:35被版主删除