Getting a Subset of Records along with Total Record Count

后端 未结 2 1459
长情又很酷
长情又很酷 2021-02-09 21:38

I\'m working on returning a recordset from SQL Server 2008 to do some pagination. I\'m only returning 15 records at a time, but I need to have the total number of matches along

相关标签:
2条回答
  • 2021-02-09 21:54

    I've handled a situation a bit similar to this in the past by not bothering to determine a definite row count, but using the query plan to give me an estimated row count, a bit like the first item in this link describes:

    http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=108658

    The intention was then to deliver whatever rows have been asked for within the range (from say 900-915) and then returning the estimated row count, like

    rows 900-915 of approx. 990
    

    which avoided having to count all rows. Once the user moves beyond that point, I just showed

    rows 1000-1015 of approx. 1015
    

    i.e. just taking the last requested row as my new estimate.

    0 讨论(0)
  • 2021-02-09 22:06

    Here is what I have done (and its just as fast, no matter which records I return):

    --Parameters include:
    @pageNum int = 1,
    @pageSize int = 0,
    
    
    
    DECLARE 
        @pageStart int,
        @pageEnd int
    
    SELECT
        @pageStart = @pageSize * @pageNum - (@pageSize - 1),
        @pageEnd = @pageSize * @pageNum;
    
    
    SET NOCOUNT ON;
    WITH tempTable AS (
        SELECT
            ROW_NUMBER() OVER (ORDER BY FirstName ASC) AS RowNumber,
            FirstName
            , LastName
        FROM People
        WHERE Active = 1
    )
    
    SELECT
        (SELECT COUNT(*) FROM tempTable) AS TotalRows,
        *
    FROM tempTable
    WHERE @pageEnd = 0
    OR RowNumber BETWEEN @pageStart AND @pageEnd
    ORDER BY RowNumber
    
    0 讨论(0)
提交回复
热议问题