use Test GO ifexists (select*from sysobjects where id =object_id('R_Student') and type ='u') droptable R_Student GO createtable R_Student ( Id nvarchar(64) PrimaryKey, Class nvarchar(64) NOTNULL, Age tinyintNOTNULL, Sex tinyintNOTNULL ) GO Declare @iint set@i=0; while (@i<1000000) begin insert R_Student values('Name'+Str(@i),'Class'+Str(@i), @i%100, @i%2) set@i=@i+1 end
GO ifexists (select*from sysobjects where id =object_id('PagedProc') and type ='p') dropprocedure PagedProc GO createprocedure PagedProc @currentpageint, -- page no @pagesizeint--page size as declare @sqlstrnvarchar(4000) --Query string if@currentpage=1 begin set@sqlstr='SELECT TOP '+Str(@pagesize) +'* from r_student order by Id' end else begin
set@sqlstr='SELECT TOP '+Str(@pagesize) +' * from r_student where id not in'; set@sqlstr=@sqlstr+'(SELECT TOP '+Str((@currentpage-1)*@pagesize) +' id from r_student order by Id)'
ifexists (select*from sysobjects where id =object_id('PagedProcUseROW_NUMBER') and type ='p') dropprocedure PagedProcUseROW_NUMBER GO createprocedure PagedProcUseROW_NUMBER @currentpageint, -- page no @pagesizeint--page size as begin WITH student AS ( SELECT*, ROW_NUMBER() OVER (ORDERBY Id) AS'RowNumber' FROM r_student ) SELECT* FROM student WHERE RowNumber BETWEEN (@currentpage-1)*@pagesize+1AND (@currentpage)*@pagesize; end GO
ifexists (select*from sysobjects where id =object_id('[spCommonPageData]') and type ='p') dropprocedure[spCommonPageData] GO --http://www.cnblogs.com/Tracy-Chuang/archive/2006/10/16/530125.html -- ============================================= -- Author: <张婷婷> -- Create date: <2006-08-24> -- Description: <通用分页存储过程> -- ============================================= CreatePROCEDURE[dbo].[spCommonPageData] @SelectNVARCHAR(500), -- 要查询的列名,用逗号隔开(Select后面From前面的内容) @FromNVARCHAR(200), -- From后的内容 @WhereNVARCHAR(500) =NULL, -- Where后的内容 @OrderByNVARCHAR(100) =NULL, -- 排序字段 @KeyNVARCHAR(50), -- 分页主键 @PageINT, -- 当前页 ***计数从1开始*** @PageSizeINT-- 每页大小 AS BEGIN SET NOCOUNT ON; Declare@SqlnVarchar(1000), @Sql2NVARCHAR(500) --Alter By Tracy.Chuang 2006-08-21更改分页算法,采用比较最大值的方法 Set@Sql= 'Select Top '+Cast(@PageSizeAs nVarchar(10))+''+@Select+' From '+@From+' Where '+Case IsNull(@Where,'') When''Then''Else@Where+' And 'End+ @Key+' >( Select ISNULL(MAX('+@Key+'), 0) AS MaxID From (Select Top '+Cast(@PageSize*(@Page-1) AsVarchar(10))+' '+@Key+ ' From '+@From+ CaseIsNull(@Where,'') When''Then''Else' Where '+@WhereEnd+ ' Order By '+@Key+') As T)'+ ' Order By '+@Key+CaseIsNull(@OrderBy,'') When''Then''Else ','+@OrderByEnd Exec(@Sql) END