La manière la plus naturelle et la plus efficace de faire du paging est d'utiliser la construction LIMIT/OFFSET (TOP dans le monde Sybase). Un DBindependent devrait savoir sur quel moteur il s'exécute et appliquer la construction SQL appropriée. Au moins, c'est comme cela que je l'ai vu dans le code des bibliothèques indépendantes DB. Vous pouvez faire abstraction de la logique de pagination une fois que vous avez obtenu les données du moteur avec la requête spécifique.
Si vous êtes vraiment à la recherche d'une seule solution SQL, pourriez-vous montrer ce que vous avez en tête? Comme le SQL pour la solution de table temporaire. Cela vous donnerait probablement des suggestions plus pertinentes.
EDIT:
Je voulais voir à quoi tu pensais parce que je ne pouvais pas voir une façon de le faire avec des tables temporaires et ne pas utiliser un moteur construction spécifique. Vous avez utilisé des constructions spécifiques dans l'exemple. Je ne vois toujours pas un moyen d'implémenter la pagination dans la base de données avec seulement du SQL standard (implémenté). Vous pourriez apporter toute la table en SQL standard et la page dans l'application, mais c'est évidemment stupide. Donc, la question serait maintenant plus comme "Y at-il un moyen d'implémenter la pagination sans utiliser LIMIT/OFFSET ou équivalent?" et je suppose que la réponse est "Sanely, non". Vous pouvez essayer d'utiliser des curseurs, mais vous risquez également de tomber dans des phrases/comportements spécifiques à la base de données. Une idée wacko (stupide de lecture) que je viens de me voir serait d'ajouter une colonne de page à la table, par exemple créer un test de table (ID int, nom varchar, téléphone varchar, page int) et vous pouvez obtenir la page 1 avec select * from table où page = 1. Mais cela signifie que vous devez ajouter du code pour maintenir cette colonne, ce qui, encore une fois, ne peut être fait qu'en amenant toute la base de données ou en utilisant des constructions spécifiques. Cela en plus d'avoir à ajouter une colonne différente pour chaque ordre possible et de nombreux autres défauts.
Je ne peux pas fournir de preuve, mais je pense vraiment que vous ne pouvez pas le faire sainement.
Oui, j'ai essayé différentes solutions, mais il semble impossible de créer une version plus ou moins portable. – aku