我对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直接使用查询时,也会发生这种情况。
答案 0 :(得分:4)
我遇到了同样的问题:查询总是在Offset值(30)上独立返回相同的行:
OFFSET 30 ROWS FETCH NEXT 10 ROWS ONLY
对我来说,这个评论是正确答案:
很奇怪,也许你在ORDER BY中的列不是确定性的,而且make 问题。字段列可以包含重复项吗?如果是这样,请添加主要 ORDER BY子句中的键列,在字段列之后。 - veljasije
我通过将[ID]列添加到Order By:
来解决了这个问题ORDER BY [Status], [ID] ASC
答案 1 :(得分:2)
OFFSET FETCH NEXT
会吓坏。要“伪造”一个不同的列,你可以这样做:
SELECT * FROM table
ORDER BY ROW_NUMBER() over (order by field)
OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY
答案 2 :(得分: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;