¿Cómo puedo hacer paginación en Sybase sin hacer una tabla temporal? (problema del oráculo rownum)
Pregunta
En Oracle, generalmente se realiza una consulta como esta para paginación.
SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#)
WHERE rid > #pagestart#
Sin embargo, no hay & "; rownum &"; funcionar en Sybase DBMS.
¿Cómo puedo hacer esa consulta exactamente igual en Sybase?
Encontré algunas formas.
-
use " rowcount "
establecer el recuento de filas 10
seleccione * de TABLEA
-
usar identidad (crear tabla temporal)
SELECT *, ROWNUM = IDENTITY (8) INTO #TEMP FROM TABLEA
SELECCIONAR * DE #TEMP WHERE ROWNUM < # pageend # AND ROWNUM > = # pagestart #
TABLA DE GOTAS #TEMP
estos no son lo que quiero.
rowcount se establece en el nivel de sesión y no quiero hacer una tabla temporal.
Solución
Si tiene una columna de identificación única en su tabla, puede usar SELECT TOP n
SELECT TOP 10 *
FROM tableA
WHERE id BETWEEN @start AND @end
Otros consejos
Esto le dará todos los identificadores para que pueda usarlos en una selección 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