2009-08-04 8 views
2

В Oracle обычно запрашивается для подкачки.Как я могу выполнить подкачку в Sybase без создания таблицы temp? (oracle rownum issue)

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

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

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

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

  1. использование "ROWCOUNT"

    набор ROWCOUNT 10

    выберите * от TABLEA

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

    SELECT *, ROWNUM = ИДЕНТИФИКАЦИЯ (8) INTO #TEMP FROM TABLEA

    SELECT * FROM #TEMP WHER E ROWNUM < # pageend # И ROWNUM> = # pagestart #

    DROP TABLE #TEMP

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

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

ответ

0

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

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

Это хорошая идея? Как узнать, что столбец id начинается с 1? И в этом нет отверстий? Я думаю, что это не ответ. –

3

Это даст вам все идентификаторы, так что вы можете использовать их в избранная как «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

Бам, настолько глупый, я просто пропустил его. Благодаря! – CrazyBS