クエリで使用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番目のクエリが100より大きいRN値を返すことがわかります。これは1から始まりません。
誰かがこの振る舞いの考えられる理由を説明できますか?row_number()
構文に変更するものはありますか、または関数値を1から開始するためにSQL Serverで変更する設定はありますか?