SQL programming 
대량 레코드에 대한 DML 분할 실행

테이블에 수정해야 하는 데이타가 많은 경우, 이를 분할하여 실행하것이 좋은 경우가 있다. 예를 들어, 10만개의 레코드를 갱신하는데 다른 트랙잭션이나 쿼리에 영향을 최소화해야 하는 Production 시스템의 경우, 이를 1만개씩 분할하여 갱신하는 것이 좋을 수 있다. (주: 물론 모든 경우 이것이 가능한 것은 아니다.)

이를 위해 'SET ROWCOUNT 레코드수' 명령을 활용할 수 있는데, 이 명령을 먼저 실행하면 해당 수정문 (혹은 DML문)이 지정된 레코드 수만큼 수정되고 실행을 멈추게 된다.

예를 들어, 아래 명령은 대량의 레코드를 수정할 때, 이를 1만개씩만 갱신하도록 하는 TSQL 문장이다. 즉, 데이타가 10만 개일 경우, 이 문장을 10번에 거쳐 나누어 실행하는 것이다.


예제






쿼리에서의 ROWCOUNT와 Top N

SET ROWCOUNT 문은 DML에서 사용할 수 있을 뿐만 아니라 SELECT 쿼리문에서도 사용할 수 있다. ROWCOUNT를 쿼리문에 사용하면 지정된 레코드 수만큼만 쿼리하고 쿼리를 멈춘다. 이는 SELECT TOP N 과 같이 SELECT 문 안에 TOP 문을 사용하는 것과 같은 효과를 갖는데, 차이점은 SET ROWCOUNT는 (별도 리셋하지 않는 한) 해당 세션이 끝날 때까지 효과가 유지되지만, Top N은 해당 쿼리문에서만 제한되어 사용된다는 점이다.

예제





본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.