[英]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.