SQL Server 강의실

시삽: 레드플러스 님 
게시판 이동:
 제목 : ROW_NUMBER() 함수를 사용한 페이징 처리
글번호: 77
작성자: 레드플러스
작성일: 2015/02/05 오후 8:45:00
조회수: 10936
-- ROW_NUMBER() 페이징

-- 샘플 테이블
Create Table dbo.Divisions
(
	DivisionId Int Identity(1, 1) Not Null Primary Key,
	DivisionName NVarChar(50) Not Null
)
Go

-- 테이블의 모든 정보를 반환해 봅니다.
Select * From Divisions;
Go

-- 200건의 샘플 데이터 입력
Declare @Name NVarChar(50)
Declare @i Int
Set @i = 1
While @i <= 200
Begin
	Set @Name = '분류' + Cast(@i As NVarChar)
	Insert Into Divisions(DivisionName) Values(@Name)
	Set @i = @i + 1
End
Go

-- 테이블의 모든 정보를 반환해 봅니다.
Select * From Divisions;
Go

-- 페이징 처리를 위한 ROW_NUMBER() 함수의 의미를 알아봅니다.
Select ROW_NUMBER() Over(Order By DivisionId) As RowNumber, * From Divisions;
Go

-- 홀수 데이터 삭제
Delete From Divisions Where DivisionId % 2 = 1;
Go

-- 페이징 처리를 위한 ROW_NUMBER() 함수의 의미를 알아봅니다.
Select ROW_NUMBER() Over(Order By DivisionId Asc) As RowNumber, * From Divisions;
Go

-- ROW_NUMBER()의 결과값을 임시로 받아서 이를 통해서 페이징 처리를 합니다.
-- 11번부터 20번까지의 데이터만 출력
Select * 
From 
	(Select ROW_NUMBER() Over(Order By DivisionId Asc) As RowNumber, * From Divisions) 
		As TempRowTables 
Where 
	RowNumber >= 11 And RowNumber < (11 + 10)
;
Go

-- With 절 사용
With TempRowTables
As
(
	Select ROW_NUMBER() Over(Order By DivisionId Asc) As RowNumber, * From Divisions
)
Select * From TempRowTables Where RowNumber Between 11 And (11 + 10 - 1);
Go

-- 페이징 처리 함수
Create Function GetDivisionsPage(@Page Int, @PageSize Int)
	Returns Table
As
	Return
		With TempRowTables
		As
		(
			Select ROW_NUMBER() Over(Order By DivisionId Asc) As RowNumber, * From Divisions
		)
		Select * From TempRowTables Where RowNumber 
			Between (@Page - 1) * @PageSize + 1 And (@Page * @PageSize) 
Go

-- 페이징 함수 사용
Select * From GetDivisionsPage(1, 10);
Select * From GetDivisionsPage(2, 20);
Select * From GetDivisionsPage(3, 5);
Go

-- 페이징 처리 저장 프로시저
Create Procedure GetDivisionsWithIndex
	@StartRowIndex Int,
	@MaxRows Int	
As
	Select * 
	From 
		(Select ROW_NUMBER() Over(Order By DivisionId Asc) As RowNumber, * From Divisions) 
			As TempRowTables 
	Where 
		RowNumber >= @StartRowIndex And RowNumber < (@StartRowIndex + @MaxRows)
Go

-- 페이징 처리 저장 프로시저 사용
Exec GetDivisionsWithIndex 11, 10
Go
Exec GetDivisionsWithIndex 11, 5
Go

-- 페이징 처리 저장 프로시저 2
Create Procedure GetDivisionsWithPage
	@Page Int,
	@PageSize Int	
As
	Select * 
	From 
		(Select ROW_NUMBER() Over(Order By DivisionId Asc) As RowNumber, * From Divisions) 
			As TempRowTables 
	Where 
		RowNumber Between (@Page - 1) * @PageSize + 1 And (@Page * @PageSize) 
Go

-- 페이징 처리 저장 프로시저 사용
Exec GetDivisionsWithPage 5, 10
Go
Exec GetDivisionsWithPage 2, 5
Go

 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트

(댓글을 남기려면 로그인이 필요합니다.)

관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 SQL Server 로그 파일(LDF) 축소하기 - 레드플러스 2015-07-19 9730
현재글 ROW_NUMBER() 함수를 사용한 페이징 처리 - 레드플러스 2015-02-05 10936
다음글 ERD: Visio 2013으로 데이터베이스 ERD(ER다이어그램) 그리기 - 레드플러스 2015-02-05 8419
 
손님 사용자 Anonymous (손님)
로그인 Home