2009-08-04 2 views
2

오라클에서는 일반적으로 페이징을 위해 다음과 같이 쿼리합니다.임시 테이블을 만들지 않고 Sybase에서 페이징을 수행하려면 어떻게합니까? (oracle rownum issue)

SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#) 
WHERE rid > #pagestart# 

그러나 Sybase DBMS에는 "rownum"기능이 없습니다.

Sybase에서이 쿼리를 정확하게 수행하려면 어떻게해야합니까?

몇 가지 방법을 찾았습니다.

  1. 사용 "행 개수"

    설정된 행 개수 10

    선택 * TABLEA에서

  2. 사용 아이덴티티 (있도록 임시 테이블)

    SELECT * ROWNUM = IDENTITY (8) TABLE #의 #TEMP에서

    SELECT * FROM #TEMP WHER E ROWNUM < #의 pageend 번호 AND ROWNUM> = # pagestart #

    DROP의 표 #TEMP

이 내가 원하는 것을하지 않습니다.

rowcount가 세션 수준에서 설정되어 있으며 임시 테이블을 만들고 싶지 않습니다. 당신이 당신의 테이블에 고유 ID 열이있는 경우

답변

0

당신은 SELECT TOP을 사용할 수 없음

SELECT TOP 10 * 
FROM tableA 
WHERE id BETWEEN @start AND @end 
+1

좋은 생각인가요? id 열이 1에서 시작한다는 것을 어떻게 알 수 있습니까? 그리고 그것에 구멍이 없다? 나는 이것이 대답이 아니라고 생각한다. –

3

이것은 "select * where id_column in (ids from query below)"

처럼 당신에게 그래서 당신이 선택에서 사용할 수있는 모든 ID를 줄 것이다
select top 10 id_column from trade 
where @whereClause 
and id_column > 0 //keep replacing this with the max id from the result set 
order by id_column 
+0

Bam, 너무 어리석은, 방금 나는 그것을 놓쳤다. 감사! – CrazyBS

관련 문제