Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005

Возможный дубликат:
Эквивалент LIMIT и OFFSET для SQL Server?

Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005, я вижу mysql, oracle, sqllite, postgre have it, microsoft не понимает, что нам это нужно?

Ответ 1

Microsoft (для изменения, можно сказать) решила реализовать стандарт ANSI вместо того, чтобы придумывать собственное собственное ключевое слово, например LIMIT. В следующей версии SQL Server (под кодовым названием "Denali" ) вы сможете использовать OFFSET/FETCH.

Тем временем вам нужно будет использовать разные методы с SQL Server (или переключать платформы, если вы считаете, что это проще, чем дополнительная настройка). Хорошая статья о нескольких методах подкачки в существующих версиях:

http://www.sqlservercentral.com/articles/T-SQL/66030/

Обязательно нажмите "Присоединиться к обсуждению", чтобы прочитать более 60 последующих комментариев, в которых обсуждаются различные аспекты предоставляемых решений.

Обратите внимание, что OFFSET/FETCH не выполняется по соображениям производительности; только для производительности. Другими словами, OFFSET/FETCH будет работать примерно так же, как и используемые ROW_NUMBER() решения.

EDIT. В то время как некоторые продемонстрировали случаи, когда Denali лучше работает на первой странице (например, http://mssqltips.com/tip.asp?tip=2420) это не намерение, и я не уверен, что дельта остается верным, когда вы проходите таблицу и переходите на последние страницы (особенно на больших таблицах).