gpt4 book ai didi

sql - SQL Server ROW_NUMBER()在哪些情况下不从1开始?

转载 作者:行者123 更新时间:2023-12-03 01:49:27 28 4
gpt4 key购买 nike

我们在查询中使用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 开始?

最佳答案

row_number总是从 1 开始。

Returns the sequential number of a row within a partition of a result set, starting at 1 for the first row in each partition.

您正在执行一个没有 order by 子句的 select top 操作。这意味着您无法控制返回哪些行。您可能会得到不同的执行计划,它们使用不同的索引来获取行。一个计划中的前 100 行与另一计划中的前 100 行不同。在 CTE 中的查询中添加相关的排序依据,或者您可以删除顶部子句,因为您无论如何都会过滤主查询中的行。

关于sql - SQL Server ROW_NUMBER()在哪些情况下不从1开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8147385/

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