在SQL 2005/2008数据库中,我们具有表BatchMaster。列:
RecordId bigint-自动增量ID,BatchNumber bigint-唯一的非聚集索引,BatchDate)。我们有一个sproc从该表返回分页数据。该存储过程对于大多数客户端来说都可以正常工作,但是在一个SQL Server实例上,我们的记录顺序存在问题。
通常,在sproc中,我们会
select * from
(
select row_number() over (order by bm.BatchDate desc, bm.BatchNumber desc) as Row,
*
from dbo.BatchMaster bm with (nolock)
)
where Row between @StartingRow and @EndgingRow
因此,您可以从上面的脚本中注意到,我们希望返回记录按BatchDate和BatchNumber排序。对于我们的一位客户,这不会发生:
记录顺序错误。另外,请注意第一列(行),它不是按升序排列的。
有人可以解释为什么吗?
最佳答案
您的代码实际上并没有对结果进行排序,它仅根据BatchDate和Batchnumber的顺序设置“行”,并且似乎正确地执行了此操作。您需要将ORDER BY Row添加到您的语句中。