sql server 2012偏移返回相同的记录

时间:2013-04-03 09:28:58

标签: 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#)和SQL Management Studio直接使用查询时,也会发生这种情况。

3 个答案:

答案 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;