[MS-SQL]페이징 처리2. ROW_NUMBER 페이징 프로시저 / TOP() 페이징

진지니·2022년 7월 15일
0

MS SQL

목록 보기
3/4

ROW_NUMBER 페이징 프로시저

✅ROW_NUMBER 사용법

SELECT ROW_NUMBER () OVER (ORDER BY [정렬할 컬럼명] ASC|DESC) AS 지정할 컬럼명 , 컬럼명1,...
FROM [테이블명]
ORDER BY [정렬할 컬럼명] -- 생략 가능

ROW_NUMBER를 사용하면 임의로 조회 순번을 매겨준다


✅ROW_NUMBER 사용예제

--왼쪽
SELECT ROW_NUMBER()OVER(ORDER BY ID ASC)AS ROWNUM,CONTENTS
  FROM TEST_DB
--오른쪽
SELECT ROW_NUMBER()OVER(ORDER BY ID DESC)AS ROWNUM,CONTENTS
  FROM TEST_DB

데이터를 0에서 부터 5개 행 출력

   SELECT TOP(5)ID,ROW_NUMBER()OVER(ORDER BY ID ASC) AS ROWNUM,CONTENTS
     FROM TEST_DB
    WHERE ID > 0
    ORDER BY ID ASC

TOP(N)컬럼명 => 컬럼명을 기준으로 N개 출력


✅ROW_NUMBER 프로시저 만들기

CREATE PROCEDURE [dbo].[SP_PAGING2]
 @PAGE_NO INT
,@PAGE_SIZE INT

AS
BEGIN
SET NOCOUNT ON
  ;WITH CTE_TABLE AS
  (
   SELECT ROW_NUMBER()OVER(ORDER BY ID ASC)AS ROWNUM,ID,CONTENTS
     FROM TEST_DB
  )
  SELECT * 
    FROM CTE_TABLE
   WHERE ROWNUM BETWEEN ((@PAGE_NO-1) * @PAGE_SIZE) + 1 AND @PAGE_NO*@PAGE_SIZE 

SET NOCOUNT OFF
END

두번째 페이지 5개 행 출력하기

EXEC [SP_PAGING2] @PAGE_NO = 2, @PAGE_SIZE = 5


✅TOP()사용하여 프로시저 만들기

CREATE PROCEDURE [dbo].[SP_PAGING3]
 @PAGE_NO INT
,@PAGE_SIZE INT

AS
BEGIN
SET NOCOUNT ON
  SELECT TOP(@PAGE_SIZE)*
  FROM TEST_DB
  WHERE ID NOT IN(
                SELECT TOP ((@PAGE_NO-1)*@PAGE_SIZE) ID
                  FROM TEST_DB
                 ORDER BY ID ASC
                   )
  ORDER BY ID ASC

SET NOCOUNT OFF
END

결과는 위와 동일!!

페이징 하는 프로시저를 3개 짜보았는데 @PAGE_NO , @PAGE_SIZE 변수 선언이
가장 어려웠던 거 같은 느낌쓰,,,

  • @PAGE_NO => 페이지 번호 <[1][2][3]>
  • @PAGE_SIZE => 한 페이지에 보여줄 행의 수, 크기
  • ((@PAGE_NO-1)*@PAGE_SIZE) => 제외할 행의 수, 크기(제외할 이전 페이지,,?)
profile
초보 개발자의 정면돌파

0개의 댓글