Réplication de la fonctionnalité LIMIT de MySQL dans Microsoft SQL Server 2000
La clause LIMIT
de MySQL simplifie la récupération d'un nombre spécifique de lignes. SQL Server 2000 n'a pas d'équivalent direct, ce qui nécessite des solutions de contournement. Voici plusieurs méthodes pour obtenir des résultats similaires :
Méthode 1 : Requêtes imbriquées (SQL Server 2000)
Cette approche utilise des instructions SELECT
imbriquées pour filtrer les lignes dans une plage définie :
<code class="language-sql">SELECT TOP 25 * FROM ( SELECT TOP 75 * FROM table ORDER BY field ASC ) a ORDER BY field DESC;</code>
Cela récupère les lignes 26 à 75 après la commande par field
. Remarque : Cette méthode est moins efficace pour les grands ensembles de données et ne gère pas correctement les scénarios ne comportant pas plusieurs tailles de page pour la dernière page.
Méthode 2 : exploiter une colonne unique (SQL Server 2000)
Si votre table possède une colonne unique (par exemple, une clé primaire), cette technique exclut les lignes déjà sélectionnées :
<code class="language-sql">SELECT TOP n * FROM tablename WHERE key NOT IN ( SELECT TOP x key FROM tablename ORDER BY key );</code>
Cela sélectionne les n
lignes, à l'exclusion des x
premières lignes, classées par colonne key
. C'est également moins efficace pour les grandes tables.
Méthode 3 : Utilisation de ROW_NUMBER() (SQL Server 2005 et versions ultérieures)
Pour SQL Server 2005 et supérieur, la fonction ROW_NUMBER()
offre une solution plus élégante :
<code class="language-sql">SELECT z2.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, z1.* FROM ( ...original SQL query... ) z1 ) z2 WHERE z2.rownum BETWEEN @offset + 1 AND @offset + @count;</code>
Cela attribue un numéro de ligne à chaque résultat, puis filtre en fonction d'un décalage spécifié (@offset
) et d'un nombre (@count
). Il s'agit généralement de la méthode la plus efficace et la plus flexible pour les versions plus récentes de SQL Server.
Méthode 4 : instruction EXCEPT (SQL Server 2005 et versions ultérieures)
Une autre option pour SQL Server 2005 et versions ultérieures utilise l'opérateur EXCEPT
set :
<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>
Cela sélectionne les lignes 51 à 75 après la commande par COL3
. Semblable à l'approche ROW_NUMBER()
, il s'agit d'une solution plus efficace pour les versions plus récentes de SQL Server. Cependant, c'est moins intuitif que ROW_NUMBER()
pour les scénarios complexes. Choisissez la méthode la mieux adaptée à votre version de SQL Server et à la taille de votre ensemble de données.
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!