MSSQL 2012 이전 (11.X 미만)
예전의 MSSQL (2012 이전)에서는 페이징 쿼리를 하기 위해서는
보통 ROW_NUMBER() 를 사용하여 정렬순으로 번호를 부여한 다음에 중첩쿼리로 복잡하게
가져오는 방법을 사용했다고 한다.
이 복잡한 방법말고 좀 더 간단한 쿼리를 알아보자.
MSSQL 2012 이후 (11.X 이상)
# 양식
ORDER BY {정렬 대상 컬럼}
OFFSET {건너 뛸 행의 수} ROWS
FETCH NEXT {가져올 행의 수} ROWS ONLY
ORDER BY를 통해 정렬 기준을 정한 뒤
OFFSET을 통해 건너 뛸 행의 수를 먼저 설정하고
(1부터 가져올 경우 OFFSET 0 ROWS, 11부터 가져올 경우 OFFSET 10 ROWS)
FETCH NEXT 에서 몇 개의 행을 가져올 지 작성하면 된다.
(한 페이지 내에 10개를 가져올 경우 FETCH NEXT 10 ROWS ONLY)
실제 사용 예
<select id="selectList" resultType="Example">
SELECT
NO
, LOCALE
, TYPE
, TITLE
, CONTENTS
, SHOW_YN
, CONVERT(VARCHAR(10), START_DAY, 23) AS START_DAY
, CONVERT(VARCHAR(10), END_DAY, 23) AS END_DAY
, ORDER_NO
, RELATION_URL
, RELATION_URL_TYPE
, REG_ID
, REG_DT
, MOD_ID
, MOD_DT
FROM
EXAMPLE A
ORDER BY
A.REG_DT DESC
OFFSET #{offsetNo, jdbcType=INTEGER} ROWS FETCH NEXT #{recordCountPerPage, jdbcType=INTEGER} ROWS ONLY
</select>
'DB > MSSQL' 카테고리의 다른 글
[MSSQL] @@IDENTITY (자동증가값) PK값 IDX값 반환 (0) | 2022.03.16 |
---|---|
[MSSQL] 날짜 포맷 변경하기 (0) | 2022.03.15 |
댓글