본문 바로가기

DataBase/MSSQL

[MSSQL] 페이징 함수 OFFSET/FETCH

SQL Server 2012 에서 Offset/Fetch 를 사용하여 효과적인 페이징처리를 하는 방법입니다.

 

SELECT seqnum,id, Name, celnumber,RegistDate
  FROM Member_info
 ORDER BY seqnum DESC  
OFFSET 0 ROWS
 FETCH NEXT 10 ROWS ONLY;

2페이지를 조회하려면 

OFFSET 10 ROWS

FETCH NEXT 10 ROWS ONLY;  로 OFFSET 을 수정하면되며

FETCH NEXT 는 한번에 조회할 데이터 갯수입니다.

 

온라인 설명서 : http://msdn.microsoft.com/ko-kr/library/ms188385(v=sql.110).aspx#Offset


Offset Fetch에 대한 제한 사항

  •   외부 쿼리와 상관 관계를 만들 수 없습니다.
  • OVER 절은 OFFSET  FETCH를 지원하지 않습니다.
  • OFFSET  FETCH INSERT, UPDATE, MERGE  DELETE 문에서 직접 지정할 수 없지만 이러한 문에 정의된 하위 쿼리에서는 지정할 수 있습니다
  • UNION, EXCEPT 또는 INTERSECT 연산자를 사용하는 쿼리에서는 쿼리 결과의 순서를 지정하는 마지막 쿼리에서만 OFFSET  FETCH를 지정할 수 있습니다.
  • 같은 쿼리 식(같은 쿼리 범위)에서 TOP OFFSET  FETCH와 결합할 수 없습니다.  

안정된 최적화를 위해서는 아래 조건을 만족해야 합니다.

  • 쿼리에 사용되는 기본 데이터가 변경되지 않아야 합니다., 쿼리와 연결된 행이 업데이트되지 않거나 페이지에 대한 모든 쿼리 요청이 스냅숏 또는 직렬화 가능 트랜잭션 격리를 사용하여 단일 트랜잭션에서 실행되어야 합니다.
    (
    위 온라인 설명서의 단일 트랜잭션에서 여러 쿼리 실행 쿼리 예를 참고하십시오.)
  • ORDER BY 절이 고유한 열 또는 열의 조합을 포함해야 합니다.

출처: https://redju.tistory.com/139 [redJu(홍주)]