我们ROW_NUMBER()
在查询中使用。它在几乎所有情况下都返回正确的结果。但是对于 1 个用户,它的行为非常不同。
With #TEST as (
select top 50
ROW_NUMBER() over (order by a.ID) as RN,
a.ID ID, a.Name Name
FROM a
where a.name like '%test%')
select *
from #TEST
where RN BETWEEN 1 AND 50
order by RN
当页面大小设置为 50 时,该查询对该用户运行良好。但是当页面大小设置为 100 时,我们观察到它没有返回所有行。它只返回 10 行。即使有超过 100 个结果满足条件。请找到以下无法正常工作的查询。
With #TEST as (
select top 100
ROW_NUMBER() over (order by a.ID) as RN,
a.ID ID, a.Name Name
FROM a
where a.name like '%test%')
select *
from #TEST
where RN BETWEEN 1 AND 100
order by RN
当试图验证原因时,我们观察到第二个查询返回的 RN 值大于 100。它不是从 1 开始的。
有人可以解释这种行为的可能原因。语法中是否有任何需要修改的内容,或者 SQL Server 中是否需要更改任何设置以使row_number()
函数值从 1 开始?