it之路。

用TOP关键字的分页存储过程

说明:此存储过程仅适用于单主键,且主键可排序的情况,不适用于复合主键,因为复合主键会出现重复某一列的情况,再进行比较的话,得出的分页结果会是错误的。

下面是存储过程的代码:

 

 


create proc Pager
@tablename varchar(80) ,    -- 表名
@str_OrderColumn varchar(50) ,    -- 待排序的字段名
@PageIndex int = 1,        -- 页码
@PageSize int = 10,        -- 页尺寸
@str_GetFields varchar(200= '*',-- 要获取的字段名
@totalRecords int output    -- 输出参数,计算记录总条数
as 
Begin
    
Declare @strSql varchar(500)
    
DECLARE   @SQL   NVARCHAR(1000)
    
DECLARE   @R BIGINT
    
SET   @SQL=  N'select @R=count(*) from  '+@TableName
    
EXEC  SP_EXECUTESQL   @SQL,  N' @R BIGINT OUTPUT',  @R OUTPUT
    
SET   @TotalRecords=  @R    -- 将总记录数赋予输出参数

    
if(@PageIndex =1)        -- 如果为第一页
        Begin
           
set @strSql='select top '+str(@PageSize)+' '+@str_GetFields+' from '+@tablename+' order by '+@str_OrderColumn
        
End
    
Else
       
set @strSql='select top '+str(@PageSize)+' '+@str_GetFields+' from '+@tablename+' where ('+@str_OrderColumn
                 
+' >= ( 
                         select Max(
'+@str_OrderColumn+') from ( 
                                 select top 
'+str((@PageSize)*(@PageIndex-1))+' * from '+@tablename+' order by '+@str_OrderColumn+' ) as tempTable
                                 )
                        ) order by 
'+ @str_OrderColumn  
    
exec(@strSql)
end

 

 

posted @ 2008-09-22 19:27  3912.77  阅读(237)  评论(0编辑  收藏  举报