Sql server 2012 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
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