用SQL语句删除重复记录的四种方法
2007-12-18 22:16
633 查看
方案1:
1、将重复的记录记入temp1表:
[/code]
1、将重复的记录记入temp1表:
select [标志字段id],count(*) into temp1 from [表名]group by [标志字段id]having count(*)>12、将不重复的记录记入temp1表: [code]insert temp1select [标志字段id],count(*) from [表名]group by [标志字段id]having count(*)=13、作一个包含所有不重复记录的表:select * into temp2 from [表名]where 标志字段id in(select 标志字段id from temp1)4、删除重复表:delete [表名] 5、恢复表: insert [表名]select * from temp26、删除临时表: drop table temp1drop table temp2方案2: declare @max integer,@id integerdeclare cur_rows cursor local for select id,count(*) from 表名 group by id having count(*) > 1open cur_rowsfetch cur_rows into @id,@maxwhile @@fetch_status=0beginselect @max = @max -1set rowcount @maxdelete from 表名 where id = @idfetch cur_rows into @id,@maxendclose cur_rowsset rowcount 0注:set rowcount @max - 1 表示当前缓冲区只容纳@max-1条记录﹐如果有十条重复的﹐就刪除 10条,一定会留一条的。也可以写成delete from 表名。方案3: create table a_dist(id int,name varchar(20))insert into a_dist values(1,'abc')insert into a_dist values(1,'abc')insert into a_dist values(1,'abc')insert into a_dist values(1,'abc')exec up_distinct 'a_dist','id'select * from a_distcreate procedure up_distinct(@t_name varchar(30),@f_key varchar(30))--f_key表示是分组字段﹐即主键字段asbegindeclare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integerselect @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'exec(@sql)open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_keyif @type=56select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id if @type=167select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +'''' exec(@sql)fetch cur_rows into @id,@max end close cur_rows deallocate cur_rowsset rowcount 0endselect * from systypesselect * from syscolumns where id = object_id('a_dist')方案4: 可以用IGNORE_DUP_KEY: create table dup (id int identity not null,name varchar(50)not null)goinsert into dup(name) values ('abc')insert into dup(name) values ('abc')insert into dup(name) values ('abc')insert into dup(name) values ('abc')insert into dup(name) values ('abc')insert into dup(name) values ('abc')insert into dup(name) values ('abc')insert into dup(name) values ('cdefg')insert into dup(name) values ('xyz')insert into dup(name) values ('xyz')goselect *from dupgocreate table tempdb..wk(id int not null, name varchar(50)not null)gocreate unique index idx_remove_dup on tempdb..wk(name)with IGNORE_DUP_KEY goINSERT INTO tempdb..wk (id, name)select id, namefrom dupgoselect *from tempdb..wkgodelete from dupgoset identity_insert dup onINSERT INTO dup (id, name)select id, namefrom tempdb..wkgoset identity_insert dup offgoselect *from dupgo
[/code]
相关文章推荐
- 用SQL语句删除重复记录的四种方法
- 用SQL语句删除重复记录的四种好方法
- 四种方法教你如何用SQL语句删除重复记录
- 四种方法教你如何用SQL语句删除重复记录
- 四种SQL语句删除重复记录的方法
- 用SQL语句删除重复记录的四种好方法
- 用SQL语句删除重复记录的四种方法
- sql语句删除重复的记录的方法
- sql语句删除重复的记录的方法
- mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .
- 用SQL语句删除重复记录的2种方法.txt
- sql语句删除重复的记录的方法
- SQL语句实现删除ACCESS重复记录的两种方法
- 【原创】用SQL语句删除重复记录的方法总结
- sql语句删除重复的记录的方法
- SQL语句 查询及删除重复记录的方法大全
- SQL操作语句之查询及删除重复记录的方法
- SQL语句实现删除ACCESS重复记录的两种方法
- sql语句删除重复的记录的方法
- sql语句删除重复的记录的方法