Это одна из причин, по которой я стараюсь избегать использования MS Server ... но в любом случае. Иногда у вас просто нет выбора (да! И мне приходится использовать устаревшую версию !!).
Я предлагаю создать виртуальную таблицу:
От:
SELECT * FROM table
Кому:
CREATE VIEW v_table AS
SELECT ROW_NUMBER() OVER (ORDER BY table_key) AS row,* FROM table
Тогда просто запрос:
SELECT * FROM v_table WHERE row BETWEEN 10 AND 20
Если поля добавлены или удалены, строка автоматически обновляется.
Основная проблема с этой опцией - то, что ORDER BY исправлен. Поэтому, если вы хотите другой порядок, вам придется создать другой вид.
UPDATE
Есть еще одна проблема с этим подходом: если вы попытаетесь отфильтровать ваши данные, они не будут работать, как ожидалось. Например, если вы делаете:
SELECT * FROM v_table WHERE field = 'test' AND row BETWEEN 10 AND 20
ГДЕ становится ограниченным теми данными, которые находятся в строках между 10 и 20 (вместо поиска во всем наборе данных и ограничения вывода).