Как я могу сделать пейджинг в Sybase без создания временной таблицы? (Оракул Роунум выпуск)
Вопрос
В Oracle обычно такой запрос для подкачки страниц.
SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#)
WHERE rid > #pagestart#
Однако " rownum " нет; функция в СУБД Sybase.
Как я могу сделать этот запрос точно таким же в Sybase?
Я нашел несколько способов.
<Ол>используйте " rowcount "
установить количество строк 10
выберите * из TABLEA
использовать идентификатор (создать временную таблицу)
SELECT *, ROWNUM = IDENTITY (8) INTO #TEMP ИЗ TABLEA
SELECT * FROM #TEMP WHERE ROWNUM < # pageend # AND ROWNUM > = #pagestart #
DROP TABLE #TEMP
это не то, что я хочу.
rowcount установлен на уровне сеанса, и я не хочу создавать временную таблицу.
Решение
Если у вас есть уникальный столбец идентификатора в вашей таблице, вы можете использовать SELECT TOP n
SELECT TOP 10 *
FROM tableA
WHERE id BETWEEN @start AND @end
Другие советы
Это даст вам все идентификаторы , чтобы вы могли использовать их в виде выбора " 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