MS-SQL 2000,2005 페이징 기법 MS-SQL




SQL 프로시저를 생성하는 도중에 페이징이 너무 와닿지가 않았다.
공부를 많이 안했다는 증거... -_-;

자료를 찾아뒤지던 중.
아주 좋은 페이징기법인 CTE (Common Table Expression) 라는 아주 좋은 녀석을 발견했다.
마침 회사디비는 SQL 2005를 사용하고 있는터라, 매우 유용하게 사용될 듯 싶다.



1. top 키워드 이용 페이징

create procedure [dbo].[PaymentList1]

    @page int,

    @pageSize int

as

BEGIN


    select top (@pageSize)

            execDate, paymentID

    from tblPayment


    where paymentID not in (

                            select top ((@page - 1) * @pageSize) paymentID

                            from tblPayment

                                ORDER BY paymentID desc

                            )

    ORDER BY paymentID desc

end


2. RowCount 키워드 이용 페이징


create procedure [dbo].[PaymentList2]

    @page int,

    @pageSize int

as

BEGIN

    DECLARE @N1 INT, @N2 INT

    declare @lastIndex int


    set @N1 = ((@page - 1) * @pageSize)

    set @N2 = @pageSize


    SET ROWCOUNT @N1


    select

        @lastIndex = paymentID            -- 마지막 로우에서 반환된 값을 임시 저장합니다

    from tblPayment

    ORDER BY paymentID desc


    SETROWCOUNT @N2


    select

        execDate, paymentID

    from tblPayment

    where paymentID < @lastIndex               


    ORDER BY paymentID desc

end

 

 

여기까지는 MS-SQL 2000에서 보편적으로 사용하던 방식입니다.

MS-SQL 2005에는 Row_Number와 CTE(Common Table Expression)을 이용하여 간편하게 페이지을 할 수 있습니다.

 

 

3. Row_Number, CTE 이용 페이징

alter procedure [dbo].[PaymentList3]

    @page int,

    @pageSize int

as

BEGIN

    with paymentListTBL as

    (

        select Row_Number() OVER (ORDER BY paymentID desc) AS rowNum,

            execDate, paymentID

        from

            tblPayment


    )


    select * from paymentListTBL

    where rowNum between ((@page - 1) * @pageSize) + 1 and @page * @pageSize


end


덧글

댓글 입력 영역


통계 위젯 (화이트)

323
153
356271

red 210