计算select语句中的记录页数

Sle*_*lee 3 sql sql-server

所以我想弄清楚我需要多少页来显示我的记录,基本上想要一个页数.

我打算做这样的事情:

SELECT COUNT(*) % 50 
FROM Customers 
WHERE ManufacturerID=@ManufacturerID 
AND ModifiedOn > @tStamp
Run Code Online (Sandbox Code Playgroud)

因此,我希望获得99条记录的2条记录,100条记录的2条记录和101条记录的3条记录

这会有用吗?这是一种不好的做法吗?对我测试一些值似乎有点不稳定.

编辑澄清:我不想获取分页记录,只需要总页数

Cᴏʀ*_*ᴏʀʏ 15

要计算页数,只需占用页面大小上的记录数的上限:

SELECT CEILING(COUNT(*) / @PageSize) FROM ...
Run Code Online (Sandbox Code Playgroud)

@PageSize你的情况为50.或者,由于您的应用程序可能知道每页显示所需的记录数,因此只需编写一个COUNT(*)从表中返回的查询,然后在代码中进行计算.例如:

var totalPages = Math.ceil(recordCount / pageSize);
Run Code Online (Sandbox Code Playgroud)

当你到达想要选择属于某个页面的记录时,我会这样做(以防万一你好奇):

WITH Paged AS
(
    SELECT
        ROW_NUMBER() OVER(ORDER BY SortColumn) AS [RowNum]
        ,* -- because we're going to choose which columns we need later
    FROM
        [MyTable]
)
SELECT 
     [Column1]
    ,[Column2]
    ,etc...
FROM 
    Paged
WHERE 
    [RowNum] BETWEEN (@PageNumber - 1) * @PageSize + 1 AND @PageNumber * @PageSize
ORDER BY 
    [SortColumn]
Run Code Online (Sandbox Code Playgroud)

你必须通过@PageNumber@PageSize您的应用程序.