私たちの質問には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は、いくつかのいずれかが、この動作の可能性の理由を説明することができますそれは1
から起動しない100以上の値を返すことを確認します。構文に何か変更がありますか、またはrow_number()
関数の値が1から始まるようにSQL Serverで変更する設定がありますか?
コメント:私はCTEを '#'で始まるいくつかの名前で呼び出すことはしません - その文字は 'TempDB'に保存された**一時テーブル**を意味します....他の名前を使用する –