Как я могу сделать нумерацию страниц на стороне сервера в SQL Server 2000? - PullRequest
0 голосов
/ 06 августа 2009

В SQL Server 2005 есть функция row_number (), которая делает пагинацию очень простой.

SELECT * FROM table WHERE row_number() between x and y

Есть ли какой-нибудь способ SQL-сервера сделать то же самое в SQL Server 2000?

(Примечание: у меня нет доступа к уникальной последовательной нумерации для запроса, то есть к чему-то, что будет синонимом для row_number ())

Ответы [ 3 ]

2 голосов
/ 06 августа 2009
SELECT  *
FROM    (
        SELECT  TOP (Y - X ) *
        FROM    (
                SELECT  TOP Y  *
                FROM    mytable
                ORDER BY
                        column
                ) q
        ORDER BY
                column DESC
        )
ORDER BY
        column
0 голосов
/ 07 августа 2009

Вы также можете использовать курсор для этого.

DECLARE @i INT
DECLARE C CURSOR FOR
SELECT ... FROM ... ORDER BY ...

OPEN C
FETCH ABSOLUTE @StartRow FROM C
SET @i = 1
WHILE (@@FETCH_STATUS == 0) AND (@i < @EndRow - @StartRow) BEGIN
   -- Do whatever you need
   FETCH NEXT FROM C
END
CLOSE C
DEALLOCATE C

Единственная проблема здесь в том, что каждая строка возвращается как отдельный набор результатов, но она выполняет свою работу.

0 голосов
/ 06 августа 2009

Не уверен, что это самое элегантное решение, но оно работало для меня, когда мы использовали SQL 2000 ...

Если вы пишете хранимую процедуру, вы можете сделать это с временной таблицей.

Создайте временную таблицу, в которой есть автоматически увеличивающийся столбец Identity, а также те же столбцы, что и в наборе результатов.

Затем выберите данные из набора результатов и вставьте их во временную таблицу (в правильном порядке).

Наконец, верните результаты из вашей временной таблицы, где значение столбца Identity действует как номер строки.

...