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

StackOverflow https://stackoverflow.com/questions/1225889

  •  22-07-2019
  •  | 
  •  

Вопрос

В 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
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top