/**//* 很强的分页存储过程,速度超快! exec Paging_RowCount 1338,5, 'TItemMater inner join TItem on TItemMater.FItemID=TItem.FItemID ', 'TItemMater.FNumber', 'TItemMater.FItemID,TItemMater.Fnumber,TItemMater.FnameC,TItemMater.FnameE,TItemMater.FLevel,TItemMater.FLong,TItemMater.Fwidth,TItemMater.Fheight,TItemMater.Fmodel,(select FNameC from Titem where FItemID=TItemMater.FUnitID) as FUnitID,TItemMater.FAcr,TItemMater.Fcub,TItemMater.FTpPs,TItemMater.Fweight,TItemMater.FJsPrice,TItemMater.FCbPrice,TItemMater.FSd,TItemMater.Flow,TItemMater.Fhigh,TItemMater.Fsafe,TItemMater.Fhour,TItemMater.FNote,TItemMater.F_1,TItem.FUnused ', 'Titem.FDeleted=0 and Titem.FUnused=0', '' drop Proc Paging_RowCount */ CREATEPROCEDURE Paging_RowCount ( @PageNumberint=1, @PageSizeint=10, @Tablesvarchar(1000), @Sortvarchar(200) =NULL, @Fieldsvarchar(1000) ='*', @Filtervarchar(1000) =NULL, @Groupvarchar(1000) =NULL ) AS DECLARE@SortTablevarchar(100) DECLARE@SortNamevarchar(100) DECLARE@strSortColumnvarchar(200) DECLARE@operatorchar(2) DECLARE@typevarchar(100) DECLARE@precint /**//*Set sorting variables.*/ IFCHARINDEX('DESC',@Sort)>0 BEGIN SET@strSortColumn=REPLACE(@Sort, 'DESC', '') SET@operator='<=' END ELSE BEGIN IFCHARINDEX('ASC', @Sort) =0 SET@strSortColumn=REPLACE(@Sort, 'ASC', '') SET@operator='>=' END IFCHARINDEX('.', @strSortColumn) >0 BEGIN SET@SortTable=SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn)) SET@SortName=SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) +1, LEN(@strSortColumn)) END ELSE BEGIN SET@SortTable=@Tables SET@SortName=@strSortColumn END SELECT@type=t.name, @prec=c.prec FROM sysobjects o JOIN syscolumns c on o.id=c.id JOIN systypes t on c.xusertype=t.xusertype WHERE o.name =@SortTableAND c.name =@SortName IFCHARINDEX('char', @type) >0 SET@type=@type+'('+CAST(@precASvarchar) +')' DECLARE@strPageSizevarchar(50) DECLARE@strStartRowvarchar(50) DECLARE@strFiltervarchar(1000) DECLARE@strSimpleFiltervarchar(1000) DECLARE@strGroupvarchar(1000) /**//*Default Page Number*/ IF@PageNumber<1 SET@PageNumber=1 /**//*Set paging variables.*/ SET@strPageSize=CAST(@PageSizeASvarchar(50)) SET@strStartRow=CAST(((@PageNumber-1)*@PageSize+1) ASvarchar(50)) /**//*Set filter & group variables.*/ IF@FilterISNOTNULLAND@Filter!='' BEGIN SET@strFilter=' WHERE '+@Filter+'' SET@strSimpleFilter=' AND '+@Filter+'' END ELSE BEGIN SET@strSimpleFilter='' SET@strFilter='' END IF@GroupISNOTNULLAND@Group!='' SET@strGroup=' GROUP BY '+@Group+'' ELSE SET@strGroup='' /**//*Execute dynamic query*/ EXEC( ' DECLARE @SortColumn '+@type+' SET ROWCOUNT '+@strStartRow+' SELECT @SortColumn='+@strSortColumn+' FROM '+@Tables+@strFilter+''+ @strGroup+' ORDER BY '+@Sort+' SET ROWCOUNT '+@strPageSize+' SELECT '+@Fields+' FROM '+@Tables+' WHERE '+@strSortColumn+@operator+ ' @SortColumn '+@strSimpleFilter+''+@strGroup+' ORDER BY '+@Sort+' --select count(*) as RecordCount,case when(count(*)%'+@PageSize+'>0) then count(*)/'+@PageSize+'+1 else count(*)/'+@PageSize+' end as PageCount FROM '+@Tables+@strFilter+' ' ) GO