use*_*008 4 sql t-sql sql-server analytic-functions
我们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
Run Code Online (Sandbox Code Playgroud)
当页面大小设置为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
Run Code Online (Sandbox Code Playgroud)
当试图验证原因时,我们发现第二个查询返回的RN值大于100.它不是从1开始.
有人可以解释这种行为的可能原因.语法中是否有任何要修改的内容,或者在SQL Server中是否有任何要更改的设置以使row_number()函数值从1开始?
Mik*_*son 11
row_number始终以1开头.
返回结果集分区中行的序号,从1开始,每个分区的第一行.
你正在做一个select top没有order by子句.这意味着您无法控制返回的行.您可能正在获得使用不同索引来获取行的不同执行计划.一个计划中的前100行与另一个计划中的前100行不同.在CTE中向查询添加相关的顺序,或者您可以删除top子句,因为无论如何您要过滤主查询中的行.
| 归档时间: |
|
| 查看次数: |
3441 次 |
| 最近记录: |