3

我对 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 使用查询时,也会发生这种情况。

4

3 回答 3

4

我遇到了同样的问题:查询总是在 Offset 值(30)上独立地返回相同的行:

OFFSET 30 ROWS FETCH NEXT 10 ROWS ONLY 

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

很奇怪,也许您在 ORDER BY 中的列不是确定性的,并且会产生问题。字段列可以包含重复项吗?如果是这样,请在 ORDER BY 子句中的字段列之后添加主键列。– 韦利亚西耶

我通过将 [ID] 列添加到 Order By 中解决了这个问题:

ORDER BY [Status], [ID] ASC
于 2017-12-06T07:43:16.853 回答
2

OFFSET FETCH NEXT如果您订购的列不包含唯一数据,那会吓坏了。要“伪造”一个不同的列,您可以这样做:

SELECT * FROM table 
ORDER BY ROW_NUMBER() over (order by field) 
OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY
于 2016-06-28T09:28:49.617 回答
1

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

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

SELECT * 
FROM table 
ORDER BY field 
OFFSET @pagesize * @pagenum ROWS FETCH NEXT @pagesize ROWS ONLY;
于 2013-04-03T10:02:59.803 回答