gpt4 book ai didi

SQL ROW_NUMBER 和排序问题

转载 作者:行者123 更新时间:2023-12-02 21:34:21 28 4
gpt4 key购买 nike

在 SQL 2005/2008 数据库中,我们有表 BatchMaster。列:RecordId bigint - 自动增量 id,BatchNumber bigint - 唯一非聚集索引,BatchDate)。我们有从该表返回分页数据的存储过程。该存储过程对于大多数客户端来说工作正常,但在一个 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 排序的记录。对于我们的一位客户来说,这种情况不会发生: enter image description here

记录顺序错误。另外,请注意第一列(行),它不是按升序排列的。

谁能解释一下为什么会这样吗?

最佳答案

假设您希望给定 BatchDateBatchNumber 具有最小的 Row 编号,并且您希望按 Row 排序,试试这个:

select * from
(
select row_number() over (order by bm.BatchDate desc, bm.BatchNumber asc) as Row,
*
from dbo.BatchMaster bm with (nolock)
)
where Row between @StartingRow and @EndgingRow
order by Row

关于SQL ROW_NUMBER 和排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980877/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com