2009-08-04 14 views
2

In Oracle, Abfrage in der Regel so für Paging.Wie kann ich in Sybase Paging durchführen, ohne eine temporäre Tabelle zu erstellen? (Orakel-Rownum-Problem)

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

In Sybase DBMS gibt es jedoch keine "rownum" -Funktion.

Wie kann ich diese Abfrage genau in Sybase durchführen?

Ich habe einige Wege gefunden.

  1. use "rowcount"

    Satz rowcount 10

    select * from TABLEA

  2. Verwendung Identität (make Temptabelle)

    SELECT *, ROWNUM = Identität (8) IN # TEMP VON TABLEA

    AUSWÄHLEN * VON #TEMP WHER E ROWNUM < # # Seite UND ROWNUM> = # pagestart #

    DROP TABLE #TEMP

diese sind nicht das, was ich will.

rowcount wird auf der Sitzungsebene festgelegt und ich möchte keine temporäre Tabelle erstellen.

Antwort

0

Wenn Sie eine eindeutige ID-Säule auf dem Tisch haben, können Sie SELECT TOP verwenden n

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

Ist das eine gute Idee? Woher weiß ich, dass die ID-Spalte bei 1 beginnt? Und hat keine Löcher drin? Ich denke, das ist keine Antwort. –

3

Dies gibt Ihnen alle ids so können Sie sie in einem Auswahl wie „select * where id_column in (ids from query below)

verwenden
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, so dumm einfach, ich habe es gerade verpasst. Vielen Dank! – CrazyBS