Мы используем 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
Когда мы пытаемся проверить причину, мы видим, что 2-й запрос возвращает значения RN больше 100. Он не начинается с 1.
Может кто-нибудь объяснить возможную причину такого поведения. Есть ли что-то, что нужно изменить в синтаксисе, или есть какие-либо настройки, которые нужно изменить в SQL Server, чтобы значения функции row_number()
начинались с 1?