繁体   English   中英

使用数据列和记录中的间隙进行自定义分页

[英]Custom paging using Data Column with gap in Records

为了使用SQL Server作为数据库使用C#, ADO.Net实现自定义分页解决方案,让我们假设以下详细信息:

Total Records = 1000
Page Size = 100

这意味着有10 pages ,我使用如下查询:

Min and Max Id (Primary Key)使用标量查询获取:

Select Min(Id), Max(Id) from Table;

Select * from Table where Id >= (Min Record) and Id < (Max Record)

在这里,对于每笔交易,“ Min and Max Record Value将按“页面大小”递增,直到“最大记录”点达到或超过“实际最大”值为止。

此解决方案对于具有连续值的自动增量/标识列可以很好地工作,但让我们假设所使用的列在值上有差距,尽管它们仍可以排序,例如1000 values介于Min = 1 and Max = 3000

  • 我有以下可能的解决方法,在下面的SO link中建议这样做,其中使用额外的RowId column来实现相同的目的。

  • 其他选项是打开阅读器并读取给定页面的记录,创建列表并因此获取页面

我理想的情况是执行Top <PageSize> sql查询,该查询从我建议的预定义行或值开始执行,而不是从头开始,因此我避免创建额外的列,可以使用断开连接的体系结构,不需要阅读器。

有任何建议或指示,如果需要澄清,请让我知道

您可以在通用表表达式(CTE)中使用ROW_NUMBER函数:

WITH CTE AS
(
   SELECT 
    t.*, 
    RN = ROW_NUMBER() OVER (ORDER BY t.ID)
   FROM dbo.TableName t
)
SELECT ID, Col2, Col3, ...
FROM CTE 
WHERE RN >= (@pageIndedx * @pageSize) AND RN <= (@pageIndedx * @pageSize) + @pageSize

如果您有机会使用Sql Server 2012及更高版本,则可以使用

提取和偏移

例如

-- Variable to hold the offset value
Declare @RowSkip As int
-- Variable to hold the fetch value
Declare @RowFetch As int

--Set the value of rows to skip
 Set @RowSkip = 20000
--Set the value of rows to fetch
 Set @RowFetch = 50000

Select *
From dbo.tblSample 
Order by (Select 1)  
Offset @RowSkip Row 
Fetch  Next @RowFetch Rows Only;

请参考: 用法1:服务器端分页以获取更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM