この記事では、SQL Server 2012 バージョンを使用した SQL Server のページング方法について説明します。以下では、pageIndex はページ数を表し、pageSize は 1 ページに含まれるレコードを表します。以下に具体的な例を示します。クエリ ページ 2 を設定し、各ページには 10 レコードが含まれます。
まず、SQL サーバーのページングと MySQL のページングの違いについて説明します。MySQL のページングは、limit (pageIndex-1) と pageSize を使用することで直接完了できます。ただし、SQL サーバーには、limit キーワードがありません。 、limit のようなもののみ。トップのキーワード。したがって、ページングはさらに面倒です。
私が知っている SQL サーバー ページングのタイプは 4 つだけです: トリプル ループ、max (主キー) の使用、row_number キーワードの使用、offset/fetch next キーワードの使用 (インターネット上で他の人のメソッドを収集して要約したもの)現時点ではこれら 4 つの方法のみが存在するはずです。他の方法はこの変形に基づいています)。
クエリ対象の Student テーブルの部分レコード
最初最初の 20 ページを取得し、次に逆の順序で取得し、最初の 10 レコードを逆の順序で取得すると、ページングに必要なデータを取得できますが、順序が逆になります。その後、逆の順序で返すことも、停止することもできます。ソートし、ソートのためにフロントエンドに直接渡します。
このタイプと考えられる別のメソッドがあります。コードはここには載せません。最初に最初の 10 レコードをクエリし、次に使用するアイデアについてだけ説明します。 「not in」を選択してこれら 10 件のレコードを除外し、「Inquire」を実行します。
-- 设置执行时间开始,用来查看性能的 set statistics time on ; -- 分页查询(通用型) select * from (select top pageSize * from (select top (pageIndex*pageSize) * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。 as temp_sum_student order by sNo desc ) temp_order order by sNo asc -- 分页查询第2页,每页有10条记录 select * from (select top 10 * from (select top 20 * from student order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。 as temp_sum_student order by sNo desc ) temp_order order by sNo asc ;
まず、最初の 11 行のレコードを先頭にし、次に max (id) を使用して最大の ID を取得し、このテーブルの最初の 10 レコードを再クエリします。ただし、条件を追加する必要があります。 id>max(id)。
set statistics time on; -- 分页查询(通用型) select top pageSize * from student where sNo>= (select max(sNo) from (select top ((pageIndex-1)*pageSize+1) sNo from student order by sNo asc) temp_max_ids) order by sNo; -- 分页查询第2页,每页有10条记录 select top 10 * from student where sNo>= (select max(sNo) from (select top 11 sNo from student order by sNo asc) temp_max_ids) order by sNo;
set statistics time on; -- 分页查询(通用型) select top pageSize * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>((pageIndex-1)*pageSize); set statistics time on; -- 分页查询第2页,每页有10条记录 select top 10 * from (select row_number() over(order by sno asc) as rownumber,* from student) temp_row where rownumber>10;
set statistics time on; -- 分页查询(通用型) select * from student order by sno offset ((@pageIndex-1)*@pageSize) rows fetch next @pageSize rows only; -- 分页查询第2页,每页有10条记录 select * from student order by sno offset 10 rows fetch next 10 rows only ;
create procedure paging_procedure ( @pageIndex int, -- 第几页 @pageSize int -- 每页包含的记录数 ) as begin select top (select @pageSize) * -- 这里注意一下,不能直接把变量放在这里,要用select from (select row_number() over(order by sno) as rownumber,* from student) temp_row where rownumber>(@pageIndex-1)*@pageSize; end -- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程 exec paging_procedure @pageIndex=2,@pageSize=10;
mysql チュートリアル」
以上がSQLサーバーのページングメソッドとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。