sql分页存储过程!与asp.net分页控件一起使用

/*
很强的分页存储过程,速度超快! 
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
*/

CREATE   PROCEDURE  Paging_RowCount
(
@PageNumber   int   =   1 ,
@PageSize   int   =   10 ,
@Tables   varchar ( 1000 ),
@Sort   varchar ( 200 =   NULL ,
@Fields   varchar ( 1000 =   ' * ' ,
@Filter   varchar ( 1000 =   NULL ,
@Group   varchar ( 1000 =   NULL
)
AS

DECLARE   @SortTable   varchar ( 100 )
DECLARE   @SortName   varchar ( 100 )
DECLARE   @strSortColumn   varchar ( 200 )
DECLARE   @operator   char ( 2 )
DECLARE   @type   varchar ( 100 )
DECLARE   @prec   int

/* Set sorting variables. */  
IF   CHARINDEX ( ' DESC ' , @Sort ) > 0
 
BEGIN
  
SET   @strSortColumn   =   REPLACE ( @Sort ' DESC ' '' )
  
SET   @operator   =   ' <= '
 
END
ELSE
 
BEGIN
  
IF   CHARINDEX ( ' ASC ' @Sort =   0
   
SET   @strSortColumn   =   REPLACE ( @Sort ' ASC ' '' )
  
SET   @operator   =   ' >= '
 
END


IF   CHARINDEX ( ' . ' @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  =   @SortTable   AND  c.name  =   @SortName

IF   CHARINDEX ( ' char ' @type >   0
   
SET   @type   =   @type   +   ' ( '   +   CAST ( @prec   AS   varchar +   ' ) '

DECLARE   @strPageSize   varchar ( 50 )
DECLARE   @strStartRow   varchar ( 50 )
DECLARE   @strFilter   varchar ( 1000 )
DECLARE   @strSimpleFilter   varchar ( 1000 )
DECLARE   @strGroup   varchar ( 1000 )

/* Default Page Number */
IF   @PageNumber   <   1
 
SET   @PageNumber   =   1

/* Set paging variables. */
SET   @strPageSize   =   CAST ( @PageSize   AS   varchar ( 50 ))
SET   @strStartRow   =   CAST ((( @PageNumber   -   1 ) * @PageSize   +   1 AS   varchar ( 50 ))

/* Set filter & group variables. */
IF   @Filter   IS   NOT   NULL   AND   @Filter   !=   ''
 
BEGIN
  
SET   @strFilter   =   '  WHERE  '   +   @Filter   +   '   '
  
SET   @strSimpleFilter   =   '  AND  '   +   @Filter   +   '   '
 
END
ELSE
 
BEGIN
  
SET   @strSimpleFilter   =   ''
  
SET   @strFilter   =   ''
 
END
IF   @Group   IS   NOT   NULL   AND   @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

你可能感兴趣的:(asp.net)