Comment faire de la pagination dans Sybase sans créer de table temporaire? (numéro d'oracle rownum)

StackOverflow https://stackoverflow.com/questions/1225889

  •  22-07-2019
  •  | 
  •  

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.

  1. utilisez & "; nombre de lignes &";

    définir le nombre de lignes 10

    sélectionnez * dans TABLEA

  2. 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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top