database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 409 게시물 읽기
No. 409
이거 평가해 주세요.
작성자
꺼벙이™(thinker0)
작성일
2002-06-04 00:09
조회수
6,231

첨부파일: xpboard_list.sql (3,375bytes)

 

DECLARE @i int

DECLARE @Result Int

DECLARE @Count int

DECLARE @Loop int

DECLARE @STR VARCHAR(4096)

DECLARE @SBlock int

DECLARE @C int

DECLARE @Start int

DECLARE @goto int

DECLARE @idx int

DECLARE @Current_Page int

DECLARE @Current_pages int

DECLARE @Page_Size int

DECLARE @Total int

DECLARE @Max_Size int

 

SET @STR = ''

SET @i = 0

SET @Page_Size = <페이지크기> -- 한페이지 당 크기

SET @Current_page = <현재페이지> -- 현재 페이지 번호

SET @Current_Pages = (@Current_page) * @Page_Size -- 현재 페이지의 실질적인 순서 번호

SET @Max_Size = <블럭크기> -- 1 Block 크기(10000)

SET @Start = 0 -- OLD 초기화

 

SELECT @Result = MAX(idx) FROM [<테이블이름>] WHERE master= 0 <옵션> -- 마지막 Idx번호

SELECT @Total = COUNT(idx) FROM [<테이블이름>] WHERE master = 0 <옵션> -- 전체 레코드

 

SET @Start = @Result -- 처음 시작 Index 레코드 번호

 

IF @Total > 0 -- 자료가 있어야많

BEGIN

IF @Current_Pages > @Max_Size -- 1 Block 이상인경우 만

BEGIN

SET @Loop = (@Total / @Max_Size) -- 전체 Block 에서 반복할 횟수

IF (@Total / @Max_Size) > 0 -- 추가 + 1

SET @Loop = @Loop + 1

WHILE @i <= @Loop -- 반복 함.

BEGIN

 

SET @Start = @Result -- 처음 시작 Index 레코드 번호

SET @SBlock = @Max_Size * @i

 

SELECT @Result = MIN(idx) FROM (SELECT TOP <블럭크기> idx FROM [<테이블이름>] WHERE idx < @Result AND master = 0 <옵션>) AS A

 

IF (@SBlock <= @Current_Pages AND @Current_Pages <= @SBlock + @Max_Size)

BEGIN

--SET @Start = @Result

--PRINT 'Find Current_Pages:('+LTRIM(STR(@Current_Pages)) + ') Page:('+LTRIM(STR(@SBlock)) + ') Start:('+LTRIM(STR(@Start))+')'+ ') Result:('+LTRIM(STR(@Result))+')'

BREAK

END

 

--PRINT 'Pass Current_Pages:('+LTRIM(STR(@Current_Pages)) + ') Page:('+LTRIM(STR(@SBlock)) + ') Start:('+LTRIM(STR(@Start))+')'

SET @i = @i + 1

END

END

 

--PRINT '---------------------------------------------------------------------------'

 

IF @Current_Pages > @Max_Size -- 1 Block 이상인경우 만

SET @goto = @Current_Pages - @SBlock - @Page_Size

ELSE

SET @goto = @Page_Size * @Current_page - @Page_Size -- 시작 순서 많큼 이동

 

--PRINT 'Start IDX: ' + LTRIM(STR(@Start)) + ' Goto: ' + LTRIM(STR(@goto))

DECLARE Cursor1 CURSOR SCROLL LOCAL KEYSET FOR SELECT TOP <블럭크기> idx FROM [<테이블이름>] WHERE idx <= @Start AND master = 0 <옵션> FOR READ ONLY

OPEN Cursor1

 

--PRINT @@CURSOR_ROWS -- 가져온 커서의 갯수

SET @i = 0

 

IF @goto > 0 -- 처음 위치 이면

BEGIN

SET @goto = @goto + 1 -- 0 + 1

FETCH ABSOLUTE @goto FROM Cursor1 INTO @Result -- 시작 위치 이동

END

ELSE

FETCH NEXT FROM Cursor1 INTO @Result -- 위치 이동

 

SET @Str = LTRIM(STR(@Result))

 

WHILE (@@FETCH_STATUS = 0 AND @i < @Page_Size -1) -- 검사

BEGIN

FETCH NEXT FROM Cursor1 INTO @Result -- 1개의 Idx 값을 가져 옮

SET @Str = @Str + ',' + LTRIM(STR(@Result)) -- 문자열에 추가

SET @i = @i + 1

END

 

--PRINT @str

CLOSE Cursor1

DEALLOCATE Cursor1

 

EXECUTE('SELECT * FROM [<테이블이름>] WHERE idx in('+@Str+') OR master in('+@Str+') ORDER BY idx DESC')

END

ELSE

SELECT * FROM [<테이블이름>] WHERE master = 0 <옵션>

 

[Top]
No.
제목
작성자
작성일
조회
412mysql.sock err [1]
박형수
2002-06-05
6408
411mysql DB권한바꾸기 [1]
김영길
2002-06-05
6497
410검색하는것좀 도와주세여,,,급한거라서,, [1]
강효정
2002-06-04
5664
409이거 평가해 주세요.
꺼벙이™
2002-06-04
6231
408[질문] 텍스트타입안에 &lt;p&gt; 문자를...
anaki
2002-06-03
5999
407timeout expired에러에 대한 질문임다
윤준노
2002-06-03
6198
406sql에 관한 질문 입니다.
정민희
2002-06-02
6199
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다