Donc, j'ai une fonction qui renvoie un certain nombre d'enregistrements pour lesquels je souhaite implémenter la pagination sur mon site Web. Il m'a été suggéré d'utiliser Offset / Fetch Next dans SQL Server 2012 pour ce faire. Sur notre site Web, nous avons une zone qui répertorie le nombre total d'enregistrements et la page sur laquelle vous vous trouvez à ce moment-là.
Auparavant, je recevais l'intégralité du jeu d'enregistrements et j'étais en mesure de créer la pagination sur ce programme. Mais en utilisant la méthode SQL avec FETCH NEXT X ROWS UNIQUEMENT, je ne reçois que X lignes, donc je ne sais pas quel est mon jeu d'enregistrements total et comment calculer mes pages min et max. La seule façon dont je peux dire de faire cela est d'appeler la fonction deux fois et de compter les lignes sur la première, puis d'exécuter la seconde avec FETCH NEXT. Existe-t-il une meilleure façon de ne pas me faire exécuter la requête deux fois? J'essaie d'accélérer les performances, pas de les ralentir.
la source
J'ai rencontré des problèmes de performances en utilisant la méthode COUNT ( ) OVER (). (Je ne sais pas si c'était le serveur car il a fallu 40 secondes pour renvoyer 10 enregistrements et ensuite n'a pas eu de problèmes.) Cette technique a fonctionné dans toutes les conditions sans avoir à utiliser COUNT ( ) OVER () et accomplit le même chose:
la source
Basé sur la réponse de James Moberg :
Ceci est une alternative d'utilisation
Row_Number()
, si vous n'avez pas SQL Server 2012 et que vous ne pouvez pas utiliser OFFSETla source