반응형
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 |