CREATEPROCEDURE sp_GetPageData @TableName sysname, --表名 @SQLvarchar(500),--约束条件 @PageIndexint,--页所引,从0开始 @PageSizeint,--分页大小 @orderDESCvarchar(100),--倒排序字段,支持多个字段 @orderASCvarchar(100),--顺排序字段,支持多个,字段先后顺序与倒排序一致 @RecordCountint out,--返回记录数 @PageCountint out--返回页数 AS declare@numint-- 2005-12-21更改,直接用SQL返回记录数 by wjh declare@vSQLnvarchar(2000) set@vSQL= N'select @count=Count(*) from '+@TableName+ N' where '+@SQL exec sp_ExecuteSQL @vSQL, N'@count int output', @num output select@RecordCount=@num SET@PageCount=CEILING(@RecordCount*1.0)/@PageSize DECLARE@sqlStrvarchar(1000) IF@PageIndex=0OR@PageIndex<1 SET@sqlStr='SELECT TOP '+STR(@PageSize) +' * FROM '+@TableName+' WHERE '+@SQL+' ORDER BY '+@orderDESC ELSEIF@PageIndex=@PageCount-1 SET@sqlStr='SELECT * FROM (SELECT TOP '+STR(@PageSize) +' * FROM '+@TableName+' WHERE '+@SQL+' ORDER BY '+@orderASC+') TempTable ORDER BY '+@orderDESC ELSE-- 此处可以加优化,从中间页往两边 SET@sqlStr='SELECT TOP '+STR(@PageSize) +' * FROM (SELECT TOP ' +STR(@RecordCount-@PageSize*@PageIndex ) +' * FROM '+@TableName +' WHERE '+@SQL+' ORDER BY '+@orderASC+') TempTable ORDER BY '+@orderDESC EXEC(@sqlStr) GO