CREATE プロシージャ main_table_pwqzc
(@pagesize int,
@pageindex int,
@docount bit,
@this_id)
as
if(@docount=1)
begin
select count(id) from luntan where this_id=@this_id
end
else
begin
declare @indextable table(id intidentity(1,1),nid int)
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound =@PageLowerBound @pagesize
set rowcount @PageUpperBound
insert into @indextable(nid) select id from luntan where this_id=@this_id order by Reply_time desc
select a.* from luntan a,@indextable t where a.id=t. nid
と t.id>@PageLowerBound および t.id<=@PageUpperBound は t.id
end
GO
で並べ替えられます。ストアド プロシージャは、渡されたパラメーター @docount に基づいて、ページングされるレコードの合計数を返すかどうかを決定します。 in
特にこの2行
set rowcount @PageUpperBound
insert into @indextable(nid) select id from luntan where this_id=@this_id order by Reply_time desc
レコード数が@PageUpperBoundに達したときのset rowcount @PageUpperBoundは本当に素晴らしいです!!クエリの処理を停止します
、select id は id 列のみを取り出して一時テーブルに置きます、select a.* from luntan a,@indextable t where a.id=t.nid
and t.id>@PageLowerBoundそして、 t .id<=@PageUpperBound order by t.id
そして、この文は、すべてのレコードを結合するのではなく、テーブルから必要なレコードのみを取り出すことで、効率が大幅に向上します!!
素晴らしい、本当に素晴らしい!!!!
CREATE PROCEDURE Paging_RowCount
(
@Tables varchar(1000),
@PK varchar(100),
@Sort varchar(200) = NULL,
@PageNumber int = 1,
@PageSize int = 10,
@Fields varchar (1000) = '*',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL)
AS
/*デフォルトの並べ替え*/
IF @Sort IS NULL OR @Sort = ''
SET @Sort = @PK
/*@PK タイプを検索*/
DECLARE @SortTable varchar(100)
DECLARE @SortName varchar(100)