2009-10-19 4 views
24

Ich muss eine Sybase-Datenbank abfragen, die viele Daten enthält, und möchte ein Limit setzen, damit die Datenbank die Abfrage nach 10 Ergebnissen stoppt.Wie kann ich die Anzahl der in Sybase zurückgegebenen Ergebnisse begrenzen?

Der Schlüssel ist Leistung, so dass es keinen Nutzen hätte, wenn es alle Ergebnisse durchsucht und dann die letzten 10 Ergebnisse zurückgibt.

Vielen Dank im Voraus

+0

Welche 10 möchten Sie? Die ersten 10? –

Antwort

20

Ich glaube, Sie eine ersten SET ROWCOUNT 10 tun können, dann alle Anfragen in dieser Sitzung, bis ein weiteren SET ROWCOUNT werden nicht mehr als 10 Zeilen zurück. Wie ein Kommentar darauf hinweist, betrifft dies alle folgenden Abfragen in der Sitzung (nicht nur SELECT s!) Bis zum Ausschalten (durch Einstellung auf 0) oder anders eingestellt - dieser "globale" Effekt macht es weniger praktisch als die typischen LIMIT Klausel von anderen Engines, die inhärent Per-Abfrage ist, aber ich glaube nicht, dass Sie etwas dagegen tun können.

+6

Und SET ROWCOUNT 0, um die Begrenzung der Zeilenanzahl auszuschalten. –

+2

Es lohnt sich auch zu betonen, während es auf einen Wert ungleich Null gesetzt ist andere Aussagen (wie aktualisieren und löschen) wird – Hobo

+0

Vielen Dank, genau was ich brauchte – Ryan

36

Mit Sybase 12.5 und höher können Sie das oberste Prädikat in Ihrer Select-Anweisung verwenden. Dies ist eine Nicht-ANSI-Funktion, die MSSQL schon seit einiger Zeit hat.

select top 10 * from people 

Sie können top in Unterabfragen, Aktualisierungen oder Löschungen nicht verwenden, und es gibt keine entsprechende "bottom" -Klausel.

Der Vorteil von top ist, dass Sie sich keine Gedanken über das Zurücksetzen machen müssen. Dies ist besonders wichtig, wenn Sie einen Datenbankverbindungspool verwenden.

+1

gibt es eine Möglichkeit, wie Sie dies für Updates tun können? –

+0

Es funktioniert auch für UPDATE und für DELETE. '' 'UPDATE TOP 10 VON Menschen ...' '' '' 'DELETE TOP 10 Personen''' Siehe http://infocenter.sybase.com/help/index.jsp?topic=/com .sybase.help.doc.ase_docs_12.5.3.newfeatures1253_rev/html/nefeatures1253_rev/nefeatures1253_rev11.htm –

-1

Sie können versuchen, diese Klausel hinzuzufügen "nur erste n Zeilen abrufen".

+0

das funktioniert nicht. Hast du eine Referenz? – Beginner

+0

Dies funktioniert nicht für Sybase, dies ist für DB2. – skw

Verwandte Themen