BLOG ARTICLE ROW_NUMBER | 1 ARTICLE FOUND

  1. 2010.09.07 SQL Server 2005에서 중복 값 제거하기

 SQL Server 2005를 사용하는 서비스가 있는데, P.K도 없는 테이블을 만들고는 거기에 중복된 값을 넣었더군요. 젠장 뭔놈의 설계를... 암튼... db를 복제해놓으려고 했더니 이 P.K없는 테이블이 걸리더군요. 그래서 pk를 넣어주기 위해서 중복 data 삭제를 시작하려했습니다. 근데... 이거 참... ROWNUM 같은걸 찾기가 힘들더군요. 고심끝에 임시 테이블을 만드는 방법을 쓰기로 했습니다.
물론 다른 방법이 충분히 존재할거 같은 느낌이 듭니다. 그러나... 너무 오랜 시간 동안 이 문제를 잡고 있을수는 없으니까요. 다른 좋은 방법을 알고 계시면 알려주시면 감사하겠습니다. 그럼 평온한 하루 보내시길...

1. 기존 DATA를 백업 테이블에 백업한다.
SELECT * INTO dbo.LIST1_BK FROM dbo.LIST1;

2. 중복된 ROW의 번호를 확인한다.
SELECT A.*
  FROM (select  ROW_NUMBER()OVER(ORDER BY VALUE2) AS SEQ1, * from dbo.LIST1) A;

3. 중복된 ROW의 번호를 제외한 나머지 DATA를 임시 테이블에 입력한다.
INSERT INTO dbo.LIST1_TEMP(VALUE1, VALUE2)
SELECT A.VALUE1, A.VALUE2
  FROM (SELECT ROW_NUMBER()OVER(ORDER BY VALUE2) AS SEQ1, * FROM dbo.LIST1) A
 WHERE A.SEQ1 NOT IN (6, 10);

4. 원본 테이블의 DATA를 삭제한다.
DELETE FROM dbo.LIST1;

5. 임시 테이블의 DATA를 원본 테이블에 입력한다.
INSERT INTO dbo.LIST1(VALUE1, VALUE2)
SELECT VALUE1, VALUE2 FROM dbo.LIST1_TEMP

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST