본문 바로가기
MS SQL

MS SQL_페이징처리2/ROW_NUMBER 사용법

by 디디찐 2022. 7. 31.
반응형

1. ROW_NUMBER 기본 사용법

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

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

2. 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

 

 

3. ROW_NUMBER 페이징 프로시저

ROW_NUMBER는 지정한 컬럼명으로 바로 WHERE문에 사용할 수 없기 때문에 

페이지에 출력되어야 하는 순서를 ROW_NUMBER로 재정렬한 뒤에 WHERE문으로 출력한다.

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

 WHERE ROWNUM BETWEEN ((@PAGE_NO-1) * @PAGE_SIZE ) + 1 AND @PAGE_NO*@PAGE_SIZE 에서

+1을 하는 이유 BETWEEN 는  <=, >= 시작 행을 건너뛰는 것이 아니라 포함하기 때문이다

 

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

WHERE ROWNUM BETWEEN (2- 1) * 5  + 1 AND 2 * 5   

 6<=  ROWNUM  <= 10 가져온다.

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

 

반응형

'MS SQL' 카테고리의 다른 글

MS SQL_PARTION사용법  (0) 2022.08.02
MS SQL_사용자 정의 함수 사용법  (0) 2022.08.02
MS SQL_프로시저 사용법  (0) 2022.08.01
MS SQL_페이징처리3/TOP()사용법  (0) 2022.07.31
MS SQL_페이징처리1/OFFSET FETCH 사용법  (0) 2022.07.31