Как я могу сделать пейджинг в Sybase без создания временной таблицы? (Оракул Роунум выпуск) - PullRequest
2 голосов
/ 04 августа 2009

В Oracle обычно такой запрос для подкачки.

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

Однако в СУБД Sybase нет функции "rownum".

Как я могу сделать этот запрос точно так же в Sybase?

Я нашел несколько способов.

  1. используйте "rowcount"

    установить количество строк 10

    выберите * из таблицы

  2. использовать идентификатор (создать временную таблицу)

    SELECT *, ROWNUM = IDENTITY (8) INTO #TEMP ОТ TABLEA

    SELECT * FROM #TEMP WHERE ROWNUM <# pageend # AND ROWNUM> = # pagestart #

    DROP TABLE # TEMP

это не то, что я хочу.

rowcount установлен на уровне сеанса, и я не хочу создавать временную таблицу.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Это даст вам все идентификаторы , так что вы можете использовать их в выборе типа "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
0 голосов
/ 05 августа 2009

Если у вас есть уникальный столбец идентификатора в вашей таблице, вы можете использовать SELECT TOP n

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