В нашем запросе мы используем ROW_NUMBER()
. Он возвращает правильные результаты практически во всех сценариях. Но для 1 пользователя это ведет себя по-разному.В каких сценариях SQL Server 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?
Боковой комментарий: Я бы ** НЕ ** вызывал свое CTE какое-то имя, которое начинается с символа '#' - этот символ обозначает ** временные таблицы **, хранящиеся в 'TempDB' .... используйте другое имя –