Как я могу выполнить нумерацию результатов на стороне сервера в SQL Server 2000?

В SQL Server 2005 есть функция row_number (), которая упрощает разбиение на страницы.

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

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

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


person Michael Pryor    schedule 06.08.2009    source источник


Ответы (2)


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

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

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

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

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

person Chris Roberts    schedule 06.08.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

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

person AlexS    schedule 06.08.2009