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


 오라클의 OTN 한글 사이트에 들어가보면 ROWNUM에 관한 Thomas Kyte[각주:1]의 글이 한글로 번역되어서 올라와 있네요.

원문 : ROWNUM의 동작 원리와 활용 방법

 ROWNUM과 이를 활용한 TOP-N Query에 대한 얘기를 하고 있다.
[Effective Oracle by Design][각주:2]의 내용을 일부 차용하여 설명하고 있습니다. Oracle DBMS에 관심이 있다면 읽어볼만한 내용입니다.

오라클 전문가 Tom Kyte가 ROWNUM의 동작 원리와 활용 방법에 대해 설명합니다.

이번 호의 Ask Tom 컬럼은 지금까지와는 조금 다른 내용을 담고 있습니다. 필자는 오라클 데이터베이스에서 Top-N 쿼리와 페이지네이션(pagination) 쿼리를 구현하는 방법에 대해 자주 질문을 받곤 합니다. 하나의 컬럼을 통해 이러한 질문에 한꺼번에 대답하기 위한 방편으로, < Effective Oracle by Design (Oracle Press, 2003)> 의 내용을 인용하기로 했습니다. 컬럼의 포맷에 맞게 책의 내용이 다소 수정되었음을 참고하시기 바랍니다.

결과 셋의 제한

ROWNUM은 오라클 데이터베이스가 제공하는 마술과도 같은 컬럼입니다. 이 때문에 많은 사용자들이 문제를 겪기도 합니다. 하지만 그 원리와 활용 방법을 이해한다면 매우 유용하게 사용할 수 있습니다. 필자는 주로 두 가지 목적으로 ROWNUM을 사용합니다.

  • Top-N 프로세싱: 이 기능은 다른 일부 데이터베이스가 제공하는 LIMIT 구문과 유사합니다.
  • 쿼리 내에서의 페이지네이션(pagination) – 특히 웹과 같은 "stateless" 환경에서 자주 활용됩니다. 필자는 asktom.oracle.com 웹 사이트에서도 이 테크닉을 사용하고 있습니다.

두 가지 활용 방안을 설명하기 전에, 먼저 ROWNUM의 동작 원리에 대해 살펴 보기로 하겠습니다




  1. Thomas Kyte(Tom Kyte)는 1993년부터 오라클에서 일해 왔습니다. 그는 현재 오라클 퍼블릭 섹터 그룹 담당 부사장으로 근무 중이며, Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions (Apress, 2005) , Effective Oracle by Design (Oracle Press, 2003)와 같은 전문서를 집필하였습니다. 또한 ASKTOM(asktom.oracle.com) 웹사이트를 운영하면서 Oracle 관리자 및 개발자들의 질문에 답변을 하고 있습니다. [본문으로]
  2. Thomas Kyte의 저서로  Oracle DBMS에 대한 심도깊은 내용이 담겨있다. http://www.amazon.com/exec/obidos/tg/detail/-/0072230657 [본문으로]
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST