row_number()分頁返回結果順序不確定
之前通過row_number()實現分頁查詢時:
select top [PageSize] * from ( select row_number() over (order by id desc) as RowNum,* from table ) as A where RowNum > (PageIndex - 1) * PageSize
發現查詢出來的結果順序是不確定的,查詢官方文檔(地址:https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017)得到原因:
ROW_NUMBER()是非確定性函數,當如下條件滿足時,結果集順序是確定的:
1、分區列的值是唯一的。( PARTITION BY)
2、order by排序的值是唯一的。
3、分區列的值和order by排序的值的組合是唯一的。
固用between and 代替,查詢出來的結果再次排序:
select * from ( select row_number() over (order by id desc) as RowNum,* from table ) as A where RowNum between (PageIndex - 1) * PageSize + 1 and PageIndex * PageSize order by RowNum asc

浙公網安備 33010602011771號