2009-08-04 12 views
2

Dans Oracle, interrogez généralement comme ceci pour la pagination.Comment faire une pagination dans Sybase sans faire de table temporaire? (problème oracle rownum)

SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#) 
WHERE rid > #pagestart# 

Cependant, il n'existe aucune fonction "rownum" dans le SGBD Sybase.

Comment faire cette requête exactement de la même manière dans Sybase?

J'ai trouvé certains moyens.

  1. utilisation "rowcount"

    set rowcount 10

    select * from TABLEA

  2. identité d'utilisation (marque table temporaire)

    SELECT *, ROWNUM = IDENTITE (8) INTO #TEMP FROM TABLEA

    SELECT * À PARTIR DE #TEMP WHER E ROWNUM < # pageend # ET 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.

Répondre

0

Si vous avez une colonne d'identification unique sur votre table, vous pouvez utiliser SELECT TOP n

SELECT TOP 10 * 
FROM tableA 
WHERE id BETWEEN @start AND @end 
+1

Est-ce une bonne idée? Comment puis-je savoir que la colonne id commence à 1? Et n'a pas de trous dedans? Je pense que ce n'est pas une réponse. –

3

Cela vous donnera toutes les ids afin que vous puissiez les utiliser dans une sélection comme « 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 
+0

Bam, si stupide, je l'ai raté. Merci! – CrazyBS

Questions connexes