createprocedure GetRecordByPage ( @TableNamenvarchar(100), --表名 @PrimaryKeynvarchar(50), --主键 @Fieldsnvarchar(1000), --字段 @CurrentPageint, --当前页数 @PageSizeint, --每页记录数 @Filternvarchar(1000), --条件 @Sortnvarchar(100) , --排序 @Countsint=0 output, --记录条数 @PageCountint=1 output --查询结果分页后的总页数 ) as set nocount on declare@sc1nvarchar(1000),@sc2nvarchar(1000) declare@iascint,@idescint,@itypetinyint declare@st1nvarchar(1000),@st2nvarchar(1000),@st3nvarchar(1000),@st4nvarchar(1000),@ssqlnvarchar(4000) set@CurrentPage=@CurrentPage+1; /**//*----------------------判断where 条件是否空值-------------------*/ iflen(@Filter)>2 select@sc1=' where '+@Filter+'', @sc2=' where '+@Filter+' and ' else begin select@sc1='', @sc2=' where ' end select@st1=upper(@Sort), @st2=@Sort, @itype=0, @Sort='', @st4=upper(@PrimaryKey) /**//*-----------------------获取查询的数据行数---------------------*/ iflen(@st2)>2 begin select@iasc=0, @idesc=0 if@st4=substring(@st1,0,len(@st4)) --存在主建 begin select@iasc=charindex('asc',@st1), @idesc=charindex('desc',@st1) end if (@iasc>0and@idesc=0) or ((@iasc>0and@idesc>0) and (@iasc<@idesc)) select@itype=1, @st3='>(select max(' elseif (@iasc=0and@idesc>0) or ((@iasc>0and@idesc>0) and (@iasc>@idesc)) begin select@itype=1, @st3='<(select min(' end set@Sort=' order by '+@st2 end /**//*-------------------------获取查询的数据行数----------------------*/ set@ssql='select @Counts=count(0) from '+@TableName+@sc1 exec sp_executesql @ssql,'@Counts int out',@Counts out set@PageCount=(@Counts+@PageSize-1)/@PageSize if@CurrentPage>@PageCount set@CurrentPage=@PageCount select@CurrentPage=(casewhen@Counts<(@CurrentPage-1)*@PageSizethenceiling(@Counts/@PageSize) when@CurrentPage<1then1else@CurrentPageend) if (@CurrentPage>1) and (@itype=1) set@ssql='select top '+cast(@PageSizeasnvarchar)+''+@Fields+' from '+@TableName+@sc2+@PrimaryKey+@st3+@PrimaryKey+') from (select top '+cast((@CurrentPage-1)*@PageSizeasnvarchar)+''+@PrimaryKey+' from '+@TableName+@sc1+@Sort+') as tbtemp)'+@Sort elseif (@CurrentPage>1) and (@itype=0) set@ssql='select '+@Fields+' from '+@TableName+@sc2+@PrimaryKey+' in (select top '+cast(@PageSizeasnvarchar)+''+@PrimaryKey+' from '+@TableName+@sc2+@PrimaryKey+' not in(select top '+cast((@CurrentPage-1)*@PageSizeasnvarchar)+''+@PrimaryKey+' from '+@TableName+@sc1+@Sort+')'+@Sort+')'+@Sort else begin set@ssql='select top '+cast(@PageSizeasnvarchar)+''+@Fields+' from '+@TableName+@sc1+@Sort end exec(@ssql) print@ssql print@Counts print@PageCount set nocount off go