SQL Serverで重複データを削除するいくつかの方法
方法1
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
には、2つの意味での重複記録があり、1つは完全に重複した記録、すなわち、すべてのフィールドが重複した記録であり、2つは、部分的なキーフィールドが重複した記録であり、他のフィールドは必ずしも繰り返したり繰り返したりしなくても無視できる。1、最初の繰り返しに対して、比較的解決しやすく、select distinct*from table Nameを使って重複記録のない結果集を得ることができます。この表が重複した記録を削除する必要がある場合(重複記録保持1条)、
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
を以下の方法で削除することができます。このような重複の原因は表の設計が不備で発生し、一意のインデックス列を追加すれば解決できます。2、このような重複問題は通常重複記録中の第一条記録を保持することを要求します。操作方法は下記のように重複フィールドがあると仮定して、Addresは、この二つのフィールドの唯一の結果集select identity(int,1,1)as atoID、*into_from table select min(atoID)asatoID select*from菗Tmp where atootID in(select atoID fromtmp 2)最後のselectはNameを得ました。Addressは重複しない結果集です。