数据库分页存储过程(3)

/*
******************************************************************************************
  存储过程名称:Common_Pagination
  存储过程功能:通用分页存储过程
  操 作 说 明 :
        
  设 计 时 间 :2004年11月01日
  代码设计者  :小朱([email protected])
******************************************************************************************
  功能描述:

******************************************************************************************
  如果您修改了我的程序,请留下修改记录,以便对程序进行维护,谢谢  !!!
==========================================================================================
  修改人   修改时间    修改原因
------------------------------------------------------------------------------------------

==========================================================================================
******************************************************************************************
  备注:

******************************************************************************************
*/

CREATE   PROCEDURE   [ dbo ] . [ Common_Pagination ]
     
@SQL            varchar ( 8000 ),         -- TSQL语句
      @PageCurr           int ,             -- 第几页
      @PageSize       int ,                 -- PageSize
      @ID           varchar ( 255 ),             -- 关键字
      @Sort           varchar ( 255 ),             -- 排序字段
      @desc           bit   =   0 ,             -- 升序/降序
     @pageCount   int  output
AS
    
    
declare   @Str   varchar ( 8000 )

    
if  ( @desc   =   1 )
        
set   @Str   =   ' SELECT TOP  '   +   CAST ( @PageSize   as   varchar ( 20 )) 
             
+   '  * FROM ( '   +   @SQL   +   ' ) T WHERE T. '   +   @ID   +   '  NOT IN (SELECT TOP  '
             
+   cast (( @PageSize * ( @PageCurr - 1 ))  as   varchar ( 20 ))  +   '   '
             
+   @ID   +   '  FROM ( '   +   @SQL   +   ' ) T2  ORDER BY  '   +   @Sort   +   '  DESC) ORDER BY  '
             
+   @Sort
    
else
        
set   @Str   =   ' SELECT TOP  '   +   CAST ( @PageSize   as   varchar ( 20 ))  +   '  * FROM ( '
             
+   @SQL   +   ' ) T WHERE T. '   +   @ID   +   '  NOT IN (SELECT TOP  '
             
+   cast (( @PageSize * ( @PageCurr - 1 ))  as   varchar ( 20 ))  +   '   '   +   @ID   +   '  FROM ( '  
             
+   @SQL   +   ' ) T2  ORDER BY  '   +   @Sort   +   '  ASC) ORDER BY  '   +   @Sort
    
    
if  ( @desc   =   1 )
        
set   @str   =   @str   +   '  DESC '
    
else
        
set   @str   =   @str   +   '  ASC '


    
exec ( @Str )
    
select   @Str = ' select  ' + @Sort + '  from ( ' + @sql + ' ) t '
    
exec ( @str )
    
select   @pageCount = @@rowcount
GO

你可能感兴趣的:(存储过程)