Самый естественный и эффективный способ обработки подкачки - использовать конструкцию LIMIT/OFFSET (TOP in Sybase world). Независимый от DB способ должен был бы знать, на каком движке он работает, и применить правильную конструкцию SQL.
По крайней мере, так я видел это в коде DB независимых библиотек. Вы можете абстрагироваться от логики подкачки, как только вы получите данные из движка с конкретным запросом.
Если вы действительно ищете одно решение для SQL-предложений, не могли бы вы показать, что вы имеете в виду? Как и SQL для решения temp table. Это, вероятно, даст вам более актуальные предложения.
EDIT:
Я хотел бы видеть, что вы думали, потому что я не мог видеть, как сделать это с временными таблицами, а не использовать двигатель конкретной конструкции. Вы использовали конкретные конструкции в этом примере. Я до сих пор не вижу способа реализовать пейджинг в базе данных только с помощью стандартного SQL. Вы можете привести всю таблицу в стандартный SQL и страницу в приложение, но это, очевидно, глупо.
Итак, теперь вопрос будет больше похож на «Есть ли способ реализовать подкачку без использования LIMIT/OFFSET или эквивалентного?» и я догадываюсь, что ответ «Санли, нет». Вы можете попробовать использовать курсоры, но вы также будете жертвовать предложениями и характеристиками конкретной базы данных.
Идея wacko (читать глупо), которая только что пришла мне в голову, заключалась бы в том, чтобы добавить столбец страницы в таблицу, например создать табличный тест (id int, имя varchar, телефон varchar, page int), а затем вы можете получить страницу 1 с выбором * из таблицы, где page = 1. Но это означает, что вам нужно добавить код для поддержки этого столбца, что снова может быть сделано только путем приведения всей базы данных или использования конкретных баз данных. Это, кроме того, нужно добавить другой столбец для каждого возможного заказа и многих других недостатков.
Я не могу предоставить доказательства, но я действительно думаю, что вы просто не можете сделать это здорово.
Troels Arvin, довольно полезная страница, спасибо! – aku 2008-09-15 07:42:46