作者:大眼仔陈先森 | 来源:互联网 | 2014-04-30 14:32
方法一以下为引用的内容:declare@maxinteger,@idintegerdeclarecur_rowscursorlocalforselect主字段,count(*)from表名groupby主字段havingcount(*)1opencur_rowsfetch
方法一
以下为引用的内容:
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有两个意义上的重复记录,一是完整重复的记录,也即所有字段均重复的记录,二是部分要害字段重复的记录,比如Name字段重复,而其他字段不必定重复或都重复可以疏忽。
1、对于第一种重复,比拟轻易解决,应用
select distinct * from tableName
就可以得到无重复记录的成果集。
假如该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
以下为引用的内容:
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
产生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复标题通常请求保留重复记录中的第一条记录,把持方法如下
假设有重复的字段为Name,Address,请求得到这两个字段唯一的成果集
以下为引用的内容:
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的成果集(但多了一个autoID字段,实际写时可以写在select子句中省往此列)