来自黄松的存储过程分页

alter proc fenye( @tblname varchar(255), --要分页的表名 @strGetFields varchar(1000), --需要返回的列 @fldName varchar(255), --要排序的字段名 @PageSize varchar(255), --页尺寸 @PageIndex int , --页码 @doCount bit, --返回记录总数,非0则返回 @OrderType bit, --返回排序类型,非0则降序 @strWhere varchar(1500) --设置查询条件,不要加 WHERE ) AS DECLARE @strSQL varchar(5000) --主语句 DECLARE @strTmp varchar(110) --临时变量 DECLARE @strOrder varchar(400) --排序类型
if @doCount !=0 BEGIN if @strWhere !='' set @strSQL ='SELECT COUNT(*) AS Total FROM ['+@tblName +'] WHERE '+@strWhere else set @strSQL ='SELECT COUNT(*) AS Total FROM ['+@tblName+']' END--以上代码的意思是如果传过来的不是0的话就进行总数统计-------------------------以下代码是@doCount 为0的情况(不进行数据统计): else BEGIN IF @OrderType !=0 begin set @strTmp='<(SELECT MIN' set @strOrder=' ORDER BY ['+@fldName+'] desc' end ELSE begin set @strTmp='>(SELECT MAX' set @strOrder =' ORDER BY ['+@fldName+'] asc' end --如果@OrderType 不是0就执行降序 **************** IF @PageIndex=1 begin if @strWhere !='' set @strSQL='SELECT TOP '+str(@PageSize)+' '+@strGetFields+'FROM ['+@tblName +'] WHERE '+@strWhere+' '+@strOrder else set @strSQL='SELECT TOP '+str(@PageSize)+' '+@strGetFields+'FROM ['+@tblName +']'+@strOrder end ----如果是第一页就执行以上代码,以便加快执行速度 else begin --以下代码赋予@strSQL真正执行的SQL代码 set @strSQL='SELECT TOP '+ str(@PageSize)+ @strGetFields+' FROM [' +@tblName +'] WHERE ['+@fldName +']'+@strTmp +'(['+@fldName+']) FROM (SELECT TOP '+str((@PageIndex-1)*@PageSize) +' ['+@fldName+'] FROM ['+@tblName +']'+@strOrder+') as tblTmp)'+@strOrder if @strWhere!='' set @strSQL='SELECT TOP '+str(@PageSize)+@strGetFields+' FROM ['+@tblName+'] WHERE ['+@fldName +']'+@strTmp +'([' +@fldName+']) FROM (SELECT TOP '+str((@PageIndex-1)*@PageSize)+' [' +@fldName+'] FROM ['+@tblName +'] WHERE '+@strWhere +' ' +@strOrder +') AS tblTmp) AND '+@strWhere +' '+@strOrder
end END
execute(@strSQL)
Posted by Picasa

没有评论: