6 Stimmen

Effiziente Möglichkeit, die Gesamtanzahl der Datensätze in SQL Server während des Paging abzurufen

Beim Abfragen einer Tabelle in SQL Server versuche ich nur die aktuelle Seite der Datensätze abzurufen. Ich benötige jedoch die Gesamtzahl der Datensätze, die für die spezielle Abfrage zurückgegeben würden, um die Anzahl der Seiten zu berechnen. Wie kann dies effizient erledigt werden, ohne eine weitere Abfrage zum Zählen der Datensätze zu schreiben.

 MIT allen Einheiten 
         ALS (SELECT Zeilennummer() ÜBER (ORDER BY se.entityid ASC) ALS 
                    rowid 
                    ,empid
                    ,lastname 
                    ,firstname
                     ,d.depname 

             FROM   emp e join dep d on e.depid=d.depid) 
    SELECT * 
    VON   allen Einheiten 
    WO  rowid >= @pageid 
           UND rowid <= @pageid + 20

4voto

Ed Harper Punkte 20677

Wenn Sie ein zweites ROW_NUMBER() hinzufügen und nach DESC anstelle von ASC sortieren, können Sie die Gesamtanzahl der Datensätze berechnen, indem Sie die beiden Zeilenzähler zusammenzählen und eins abziehen. Jede Zeile im Ergebnis hat die korrekte Gesamtanzahl von Zeilen:

 MIT allen Entitäten 
         ALS (SELECT Row_number() OVER (ORDER BY se.entityid ASC) AS 
                    rowid 
                    ,empid
                    ,lastname 
                    ,firstname
                    ,d.depname 
                    ,ROW_NUMBER() OVER (ORDER BY se.entityid DESC) AS rowIdNeg
             FROM   emp e join dep d on e.depid=d.depid) 
    SELECT * 
            ,rowid + rowIdNeg - 1 as totalRecords
    FROM   allentities 
    WHERE  rowid >= @pageid 
           AND rowid <= @pageid + 20

0voto

ika Punkte 1801

Wenn Ihre Anwendung es zulässt, können Sie versuchen, einen Suchindex zu installieren und zu verwenden, um solche Abfragen durchzuführen. Suchindizes haben die Funktionalität, mit Paging zu arbeiten.

Sie können zum Beispiel http://lucene.apache.org/solr/ verwenden. Es kann konfiguriert werden, um eine Sql-Server-Datenbank zu indizieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X