Не уверен, что это самое элегантное решение, но оно работало для меня, когда мы использовали SQL 2000 ...
Если вы пишете хранимую процедуру, вы можете сделать это с временной таблицей.
Создайте временную таблицу, в которой есть автоматически увеличивающийся столбец Identity, а также те же столбцы, что и в наборе результатов.
Затем выберите данные из набора результатов и вставьте их во временную таблицу (в правильном порядке).
Наконец, верните результаты из вашей временной таблицы, где значение столбца Identity действует как номер строки.