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 는 두 가지 의미 의 중복 기록 이 있 습 니 다.하 나 는 완전히 중복 되 는 기록 입 니 다.즉,모든 필드 가 중복 되 는 기록 입 니 다.다른 하 나 는 일부 관건 적 인 필드 가 중복 되 는 기록 입 니 다.예 를 들 어 Name 필드 가 중복 되 거나 다른 필드 가 반드시 중복 되 거나 무시 할 수 있 습 니 다.1.첫 번 째 중복 에 대해 비교적 쉽게 해결 할 수 있 습 니 다.selectinct*from tableName 을 사용 하면 중복 기록 이 없 는 결과 집합 을 얻 을 수 있 습 니 다.이 표 가 중복 되 는 기록(중복 기록 보존 1 개)을 삭제 해 야 한다 면 다음 과 같은 방법 으로 삭제 할 수 있다
 
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
이러한 중복 이 발생 하 는 원인 은 표 디자인 이 주도면밀 하지 않 아서 발생 한 것 이 고 유일한 색인 열 을 추가 하면 해결 할 수 있다.2.이러한 중복 문 제 는 보통 중복 기록 의 첫 번 째 기록 을 보존 해 야 합 니 다.조작 방법 은 다음 과 같 습 니 다.중복 되 는 필드 가 Name,Address 라 고 가정 하고 이 두 필드 의 유일한 결과 집합 인 selection idenity(int,1,1)as autoID,*into\#Tmp from table Name selectmin(autoID)as autoID into\#Tmp 2 from\#Tmp group by Name 을 받 아야 합 니 다.autoID select*from\#Tmp where autoID in(select autoID from\#tmp 2)마지막 select 는 Name 을 얻 었 습 니 다.Address 는 중복 되 지 않 는 결과 집합 입 니 다.

좋은 웹페이지 즐겨찾기