Solutions de contournement pour la clause LIMIT dans les anciennes versions de Microsoft SQL Server
Microsoft SQL Server 2000 ne disposait pas de la fonction ROW_NUMBER()
, ce qui rendait difficile la réplication de la fonctionnalité de la clause LIMIT
trouvée dans des bases de données comme MySQL. Plusieurs méthodes existent, chacune présentant des inconvénients.
Les requêtes imbriquées utilisant TOP
sont une approche courante. Cependant, cette méthode échoue lorsque la plage souhaitée dépasse le nombre total de lignes, provoquant des erreurs de pagination, notamment sur la « page » finale
Une autre technique repose sur une colonne unique au sein du tableau. Ceci est intrinsèquement limité, car cela dépend de l'existence d'un identifiant unique approprié.
Pour SQL Server 2005 et versions ultérieures, l'instruction EXCEPT
offre une solution plus robuste. Cela implique de combiner des requêtes imbriquées avec l'opérateur EXCEPT
pour filtrer les lignes initiales, obtenant ainsi efficacement le sous-ensemble souhaité.
Exemple illustratif : Pour récupérer les lignes 50 à 75 :
<code class="language-sql">SELECT * FROM ( SELECT TOP 75 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS foo EXCEPT SELECT * FROM ( SELECT TOP 50 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS bar;</code>
En résumé, bien qu'il existe des solutions de contournement pour imiter LIMIT
dans SQL Server 2000, aucune ne reproduit parfaitement son comportement sans compromis ni recours à des fonctionnalités supplémentaires. Pour les versions prenant en charge ROW_NUMBER()
(SQL Server 2005 et versions ultérieures), l'utilisation de cette fonction est la méthode recommandée et la plus efficace.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!