Sql server 2012 sql server 2012偏移量返回相同记录

Sql server 2012 sql server 2012偏移量返回相同记录,sql-server-2012,Sql Server 2012,我对SQL Server 2012有一个奇怪的问题 我使用这样的查询 SELECT * FROM table ORDER BY field OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY 每次我在0到25、25到50、50到75、75到100之间使用这个查询时,它都会返回相同的25条记录 当我使用100到125,它返回原来的25到50等 我的表只包含197条记录,而这种情况只发生在数据库的一个表中。所有其他表都正常工作 当我通过代码(ASP.NET C#)和直接从S

我对SQL Server 2012有一个奇怪的问题

我使用这样的查询

SELECT * FROM table ORDER BY field OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY
每次我在0到25、25到50、50到75、75到100之间使用这个查询时,它都会返回相同的25条记录

当我使用100到125,它返回原来的25到50等

我的表只包含197条记录,而这种情况只发生在数据库的一个表中。所有其他表都正常工作


当我通过代码(ASP.NET C#)和直接从SQL Management Studio使用查询时,也会发生这种情况。

您必须稍微更改逻辑,以包括哪个页面处于活动状态:

DECLARE @pagesize AS BIGINT = 25, @pagenum AS BIGINT = 3; 

SELECT * 
FROM table 
ORDER BY field 
OFFSET @pagesize * @pagenum ROWS FETCH NEXT @pagesize ROWS ONLY;

OFFSET FETCH NEXT
如果您订购的列不包含唯一数据,则会发生异常。要“伪造”不同的列,可以执行以下操作:

SELECT * FROM table 
ORDER BY ROW_NUMBER() over (order by field) 
OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY

我也有同样的问题:查询总是在偏移量值(30)上独立返回相同的行:

对我来说,这一评论是正确的答案:

奇怪的是,也许你的专栏顺序是不确定的,而且 问题Can字段列是否可以包含重复项?如果是,请添加主 字段列之后的ORDER BY子句中的键列维尔贾西耶

我通过在订单中添加[ID]列解决了这个问题:

ORDER BY [Status], [ID] ASC

我已经在我的c#代码中这样做了,因此我的查询是类似逻辑的结果如果在数据库端执行此逻辑,它应该会更快:)在数据库端移动逻辑将解决我原来的问题,但现在查询不会返回所有记录。我有197条记录,每页25条记录,在第n8页我只有5条记录,而不是22条(25*7=175,所以在第8页我需要22条记录)。奇怪的是,也许你在
ORDER BY
中的列是不确定的,这会造成问题。
字段
列是否可以包含重复项?如果是这样,请在
orderby
子句的
field
列之后添加主键列。“field”列是datetime这是正确答案,orderby中的列必须是唯一的。谢谢
ORDER BY [Status], [ID] ASC