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

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

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

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

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

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
posted @ 2006-01-05 09:08  迪克猪  阅读(522)  评论(0编辑  收藏  举报