Como posso fazer a paginação em Sybase sem fazer tabela temporária? (Edição rownum Oracle)
Pergunta
No Oracle, geralmente consulta como esta para paginação.
SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#)
WHERE rid > #pagestart#
No entanto, não há nenhuma função "rownum" em Sybase DBMS.
Como posso fazer essa consulta exactlly mesmo no Sybase?
Eu encontrei algumas maneiras.
-
uso "rowcount"
set rowcount 10
SELECT * FROM TABLEA
-
uso de identidade (tabela temporária make)
SELECT *, ROWNUM = IDENTIDADE (8) EM #TEMP DE TABLEA
SELECT * FROM #TEMP ONDE ROWNUM <# pageend # E ROWNUM> = #pagestart #
DROP TABLE #TEMP
estes não são o que eu quero.
rowcount está definido no nível da sessão e eu não quero criar tabela temporária.
Solução
Se você tem uma coluna id único na sua mesa você poderia usar SELECT TOP n
SELECT TOP 10 *
FROM tableA
WHERE id BETWEEN @start AND @end
Outras dicas
Isto lhe dará todo o ids para que você possa usá-los em uma escolha como "select * where id_column in (ids from query below)
"
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