2009-08-06 5 views
0

Dans SQL Server 2005, il existe une fonctionnalité appelée row_number() qui rend la pagination très simple.Comment puis-je effectuer une pagination côté serveur des résultats dans SQL Server 2000?

SELECT * FROM table WHERE row_number() between x and y 

Existe-t-il une méthode SQL Server pour faire la même chose dans SQL Server 2000?

(Note: Je n'ai pas accès à une numérotation séquentielle unique pour la requête, à savoir quelque chose qui serait synonyme de row_number())

Répondre

2
SELECT * 
FROM (
     SELECT TOP (Y - X) * 
     FROM (
       SELECT TOP Y * 
       FROM mytable 
       ORDER BY 
         column 
       ) q 
     ORDER BY 
       column DESC 
     ) 
ORDER BY 
     column 
+0

Oh ouais - c'est mieux: o) –

0

Je ne sais pas si cela est la solution la plus élégante, mais travaillé pour moi quand nous avons utilisé SQL 2000 ...

Si vous écrivez une procédure stockée, vous pouvez le faire avec une table temporaire.

Créez une table temporaire avec une colonne Identité à incrémentation automatique et les mêmes colonnes que votre jeu de résultats.

Ensuite, sélectionnez les données du jeu de résultats et insérez-les dans cette table temporaire (dans le bon ordre). Enfin, renvoyez les résultats de votre table temporaire où la valeur de votre colonne Identité agit en tant que numéro de ligne.

0

Vous pouvez également utiliser le curseur pour cela.

DECLARE @i INT 
DECLARE C CURSOR FOR 
SELECT ... FROM ... ORDER BY ... 

OPEN C 
FETCH ABSOLUTE @StartRow FROM C 
SET @i = 1 
WHILE (@@FETCH_STATUS == 0) AND (@i < @EndRow - @StartRow) BEGIN 
    -- Do whatever you need 
    FETCH NEXT FROM C 
END 
CLOSE C 
DEALLOCATE C 

Le seul problème ici est que chaque ligne est renvoyée comme un jeu de résultats séparé, mais elle fait le travail.

Questions connexes