因此,我有一个函数可以返回一些我想在我的网站上实现分页的记录。有人建议我使用 SQL Server 2012 中的 Offset/Fetch Next 来完成此操作。在我们的网站上,我们有一个区域列出了记录总数以及您当时所在的页面。
之前,我获取了整个记录集,并能够以编程方式在其上构建分页。但是使用仅 FETCH NEXT X ROWS 的 SQL 方式,我只返回 X 行,所以我不知道我的总记录集是什么以及如何计算我的最小和最大页。我能告诉您执行此操作的唯一方法是调用该函数两次并在第一次上执行行计数,然后使用 FETCH NEXT 运行第二次。有没有更好的方法,不会让我运行查询两次?我正在努力提高性能,而不是降低性能。
我使用 COUNT() OVER() 方法。 (我不确定是否是服务器的问题,因为它花了 40 秒才返回 10 条记录,后来没有任何问题。)这种技术在所有条件下都有效,无需使用 COUNT() OVER() 并完成同样的事情:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)