Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abrufen der Gesamtzeilenanzahl von OFFSET / FETCH NEXT

Bei der Verwendung der Methode COUNT() OVER() bin ich auf einige Leistungsprobleme gestoßen. (Ich bin mir nicht sicher, ob es der Server war, da es 40 Sekunden dauerte, um 10 Datensätze zurückzugeben, und später keine Probleme mehr hatte.) Diese Technik funktionierte unter allen Bedingungen, ohne dass COUNT( verwendet werden musste ) OVER() und erreicht dasselbe:

DECLARE 
    @PageSize INT = 10, 
    @PageNum  INT = 1;

WITH TempResult AS(
    SELECT ID, Name
    FROM Table
), TempCount AS (
    SELECT COUNT(*) AS MaxRows FROM TempResult
)
SELECT *
FROM TempResult, TempCount
ORDER BY TempResult.Name
    OFFSET (@PageNum-1)*@PageSize ROWS
    FETCH NEXT @PageSize ROWS ONLY