MSSQL 페이징

요즘 진행하는 일 관련해서 페이징을 MySQL 처럼 쉽게 할 수 없을까 하는 생각이 들더군요. 그러다가 요런 방법이 떠올랐는데....

SELECT
    TOP [record per page]
    *
FROM
    (
        SELECT
            ROW_NUMBER() OVER(order by [target_key] [direction]) - ([record per page] * [current page]) AS CNT,
            *
        FROM
            [target table]
        WHERE
            0 = 0
            [conditions]
    ) AS temp
WHERE
    CNT > 0
;

위와 같은 형태가 떠오르더군요. 동작도 잘 하고. 얼추 MySQL의 limit, offset 같은거죠.
붉은색 부분은 무조건 필요합니다. 파란색 부분은 실질적으로 조회할 정보에 대한 쿼리문 입니다. 그리고 굵은 글씨가 limit, offset 역할을 합니다. 마지막으로 [이텔릭] 은 개발자가 별도의 변수를 할당하거나 상황에 맞게 직접 입력하는 부분입니다.

전문적으로 하시는 분은 또 다른 방법도 쓰시겠지만, 이거 이전에는 좀 복잡하게 해서 말이죠;;

WHERE
   CNT BETWEEN (페이지당레코드수 * 페이지) AND ((페이지당레코드수 * 페이지) + 페이지당레코드수)

뭐... 이런식으로 말이죠 -_-;;;

댓글

댓글 쓰기

이 블로그의 인기 게시물

11점 풀 트래킹 달성

[빼먹은거 추가+] 바이브 무선킷 연결 끊김 문제

JQuery로 테이블 행(ROW) 복사 뜨기.