Comment faire de la pagination dans Sybase sans créer de table temporaire? (numéro d'oracle rownum)
Question
Dans Oracle, effectuez normalement une requête de ce type pour la pagination.
SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#)
WHERE rid > #pagestart#
Cependant, il n'y a pas de " rownum " fonction dans le SGBD Sybase.
Comment puis-je effectuer cette requête exactement de la même manière dans Sybase?
J'ai trouvé des solutions.
-
utilisez & "; nombre de lignes &";
définir le nombre de lignes 10
sélectionnez * dans TABLEA
-
utiliser l'identité (créer une table temporaire)
SELECT *, ROWNUM = IDENTITY (8) INTO #MPT DE TABLEA
SELECT * FROM #TEMP WHERE ROWNUM < # pageend # AND ROWNUM > = #pagestart #
DROP TABLE #TEMP
ce ne sont pas ce que je veux.
rowcount est défini au niveau de la session et je ne veux pas créer de table temporaire.
La solution
Si vous avez une colonne d'identifiant unique sur votre table, vous pouvez utiliser SELECT TOP n
SELECT TOP 10 *
FROM tableA
WHERE id BETWEEN @start AND @end
Autres conseils
Cela vous donnera tous les identifiants afin que vous puissiez les utiliser dans un type de sélection tel que & "; select * where id_column in (ids from query below)
&";
select top 10 id_column from trade
where @whereClause
and id_column > 0 //keep replacing this with the max id from the result set
order by id_column