asp mssql 페이징

개발/MS-SQL 2013. 1. 22. 14:54

// 총 개수 - 리스트 쿼리

SQL = "SELECT count(*) as recordCount FROM HPA010T "
SQL = SQL & " WHERE SEQ IS NOT NULL "

Set rs = dbCon.Execute(SQL)
'// 총 레코드 갯수
li_totalCnt = FormatNumber(rs("recordCount"), 0)

'// 한 페이지 표시 레코드 수
li_recordCnt = 10

'// 총 페이지 갯수
li_pageCnt = int((li_totalCnt-1)/li_recordCnt) + 1

'// 페이지 번호 - movePage를 get으로 받아온다
li_movePage = Request.QueryString("movePage")

'//2005 이후 버전에서만 RowNum 를 지원함
SQL = ""
SQL = SQL & " SELECT SEQ "
SQL = SQL & " ,USE_YN "
SQL = SQL & " ,TITLE "
SQL = SQL & " ,START_DT "
SQL = SQL & " ,END_DT "
SQL = SQL & " ,KIND_TP "
SQL = SQL & " ,POPUP_TP "
SQL = SQL & " ,INSERT_DT "
SQL = SQL & " FROM (SELECT ROW_NUMBER() OVER (ORDER BY INSERT_DT DESC) AS RowNum "
SQL = SQL & " ,SEQ "
SQL = SQL & " ,USE_YN "
SQL = SQL & " ,TITLE "
SQL = SQL & " ,START_DT "
SQL = SQL & " ,END_DT "
SQL = SQL & " ,KIND_TP "
SQL = SQL & " ,POPUP_TP "
SQL = SQL & " ,INSERT_DT "
SQL = SQL & " FROM HPA010T "
SQL = SQL & " ) AS K "
SQL = SQL & " WHERE RowNum BETWEEN "& ((li_movePage - 1) * li_recordCnt) + 1 & "
SQL = SQL & " AND " & ((li_movePage - 1) * li_recordCnt) + li_recordCnt

<설명>
1. from절 : 가져오려는 orderby 로 row번호를 붙여 select한다.
2. 1에서 가져온 테이블에서 RowNum 에 범위를 주어 원하는 범위의 데이터만 가져온다.
예) 1페이지당 10개씩 보여준다고 할때 3페이지의 리스트를 가져올 경우 시작번호는 21, 끝번호는 30가 된다.



'//2000이하버전에서는 RowNum를 지원하지 않기때문에 유일한 키를 갖고 페이징처리함.

'//**()안과 바깥에 조건이 같아야 함**
SQL = ""
SQL = SQL & " SELECT TOP " & li_recordCnt & "
SQL = SQL & " SEQ "
SQL = SQL & " ,USE_YN "
SQL = SQL & " ,TITLE "
SQL = SQL & " ,START_DT "
SQL = SQL & " ,END_DT "
SQL = SQL & " ,KIND_TP "
SQL = SQL & " ,POPUP_TP "
SQL = SQL & " ,INSERT_DT "
SQL = SQL & " FROM HPA010T "
SQL = SQL & " WHERE SEQ NOT IN "
SQL = SQL & " (SELECT TOP " & ((li_movePage - 1) * li_recordCnt) & " SEQ "
SQL = SQL & " FROM HPA010T "
SQL = SQL & " WHERE SEQ IS NOT NULL "
SQL = SQL & " ORDER BY INSERT_DT DESC ) "
SQL = SQL & " ORDER BY INSERT_DT DESC "

<설명> - 1페이지당 10개씩 보여준다고 할때 3페이지의 리스트를 가져올 경우
1. 조건 : 데이터의 유일한 키가 되는 값이 있어야 한다. WHERE 절 안과 밖 select 의 ORDER BY가 같아야 한다.
2. 원하는 orderby로 TOP 30 개를 select 한다.
3. 같은 orderby로 TOP 20 개를 select 한다.
4. 2에서 3을 뺀다. (여기서는 NOT IN을 사용) - 이 작업이 정확히 이뤄질려면 유일한 키로 NOT IN 처리 해야한다.

 

출처 : http://coolmsd.tistory.com/70 

'개발 > MS-SQL' 카테고리의 다른 글

mssql cursor  (0) 2013.06.10
mssql 페이징2  (0) 2013.01.22
mssql IDENTITY 증가값 초기화  (0) 2012.10.30
Mssql identity 설정 on/off  (0) 2012.10.25
sp_dbcmptlevel 호환성 수준  (0) 2012.04.17
블로그 이미지

쭈니후니

개발자로서 공부와 낚시를 좋아하는 한사람으로서의 추억을 담을 블로그입니다.

,