sql server 删除重复数据的三种方法

发布时间:2019-11-01编辑:脚本学堂
本文介绍下,在sql server中删除重复数据的三种实现方法,帮助大家掌握sql server 重复数据的删除办法,有需要的朋友参考下吧。

本节内容:
在sql server中删除重复的数据。

方法一,对于数据量不大,效率要求不高的,比较通用的一类方法,使用游标进行删除

sql语句
 

复制代码 代码示例:

//定义两个变量
delcare @max integer,@id integer

//定义一个本地游标
declare cusCursor cursor local for select id,count(*) from tableName group by id having count(*)>1

//打开游标
open cusCursor

//将当前游标读取的内容放到变量中
fetch cusCursor into @id,@max  

//判断游标执行前面fetch语句后的状态,如果成功,则开始循环
while @@fetch_status=0  
begin
  select @max=@max-1

  //设置后面语句处理的条数 
  set rowcount @max

  //删除重复的数据,只保留一条
  delete from tableName where id=@id  

  //游标向下移一行,继续读取数据
  fetch cusCursor into @id,@max  
end

//关闭游标
close cusCursor

//删除游标
deallocate cusCursor
set rowcount 0

方法二,使用临时表的方法删除重复记录,该方法效率较高,可是有局限性

sql语句:
 

复制代码 代码示例:

//将源表中的数据distinct以后,就只剩下唯一一条数据了,再将该条数据写入到临时表#tempTable中
select distinct * into #tempTable from tableName

//清空源表中的数据
truncate table tableName

//将临时表中的数据写入到源表中
select * into tableName from #temTable

//删除临时表
drop #tempTable 

该方法的不足:
数据库的表中存在image,text类型字段时会报错,提示该类型字段无法进行distinct操作。

方法三,针对第二种方法的局限性,而且数据量也较大,对效率也有一定的要求的情况下,可以第三种方法。

sql语句:
 

复制代码 代码示例:

//将源表的数据结构复制到临时表#tempTable中
select * into #tempTable from tableName where 1<>1

//在临时表中创建索引,并忽略重复列数据
Create unique index temp on #tempTable(重复列名) with IGNORE_DUP_KEY

//将源表中的数据拷贝到临时表中,拷贝的同时会忽略重复列的数据,也即只保留了一份数据。
insert into #tempTable select * from tableName

//清空源表
truncate table tableName

//将临时表中的数据写入到源表中
insert into tableName select * from #tempTable  

//删除临时表
drop table #tempTable
 

总结:
以上介绍的三种sql server删除数据库重复记录的方法,其中第三种方法在效率和通用性上都较好,在10W级数据量上都能有较好的表现。
建议参考、使用第三种方法。

>>> 您可能感兴趣的文章:
如何在SQL Server2008中删除重复记录
SQL Server删除重复数据的几种方法
sql server删除重复记录且只余一条的例子
T-SQL排序、重复数据的剔除保留及分页存储过程的例子
sql server 重复记录的取最新一笔的实现方法
T-SQL排序-重复数据的剔除保留及分页存储过程
sql server 查询重复记录的多种方法
删除SQL重复记录的方法介绍
sql server中删除重复数据的方法介绍
sql server一条语句删除表中重复记录
SQL分享:查询只显示一次重复的值
sql查询重复记录的方法举例
一条sql语句删除表中重复记录