Frage

Szenario: Ich brauche Informationen aus einer Visual FoxPro-Datenbank zu ziehen; hat jedoch läuft große Abfragen gegen diese Tendenz, das System zu sperren. Um dies zu beheben, setzten wir Grenzen in Kraft, dass die Abfrage abgebrochen, wenn es an einem gewissen Zeit läuft, und begrenzt die Anzahl der Zeilen würde es zurück.

Gibt es eine Möglichkeit, eine Abfrage haben mit „TOP ### SELECT“, aber dem Rück auch die tatsächliche Anzahl der Zeilen durch die Aussage gefunden? Oder ist der einzige Weg, um die Abfrage zweimal ausführen? (Grund dafür ist, wir können immer noch die Abfrage ausgeführt haben, doch informieren den Benutzer von dem, was vor sich geht. Das heißt „Zuerst ### angezeigt von ### Artikel gefunden“).

Mein erster Versuch war es einfach nur einen „COUNT (*)“ an den ausgewählten Teil der Anweisung hinzufügen, aber das hat nicht ganz zu erreichen, was ich war auf der Suche nach (es zurückgegeben die richtige Anzahl der Zeilen, aber nur zurück eine Zeile für den Rest der Daten).

War es hilfreich?

Lösung

Wenn ich die Frage richtig verstanden habe, könnten Sie eine subselect tun, aber das bedeutet, dass Sie die Zählung SQL rufen Sie für jede Zeile zurückgegeben:

select top 10 field1, field2, (select count(*) from table) as totalrows from table

Das gibt Ihnen die Top 10 Zeilen mit einer zusätzlichen Spalte in jedem genannt totalRows, die Anzahl aller Zeilen in der Tabelle enthält.

persönlich aber ich würde nur eine separate Abfrage ausführen, um die Spitze zu kommen n Zeilen und die Zählung.

Andere Tipps

Sie müßten 2 separate SELECTs laufen. Man kann die Anzahl der Zeilen von der Abfrage zurück abzurufen und dann die Teilmenge der Datensätze für eine bestimmte Seite zurückzukehren.

Sie können diese optimieren, indem sie nur einmal die Gesamtzahl abrufen, wenn die erste „Seite“ abgerufen werden (das heißt sie die gesamte Zählung nicht für nachfolgende Seiten)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top