针对sql 2005的分页存储过程 .

本文介绍了一个SQL Server中用于实现高效分页查询的存储过程Pg_Paging。该过程通过动态SQL实现,支持多表连接、排序、过滤、分组等功能,并可根据需求返回总记录数。
  ALTER   PROCEDURE   [ dbo ] . [ Pg_Paging ]
@Tables   varchar ( 1000 ),  -- 表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID
@PK   varchar ( 100 ),     -- 主键,可以带表头 a.AID
@Sort   varchar ( 200 =   '' -- 排序字段
@PageNumber   int   =   1 ,     -- 开始页码
@PageSize   int   =   10 ,         -- 页大小
@Fields   varchar ( 1000 =   ' * ' , -- 读取字段
@Filter   varchar ( 1000 =   NULL , -- Where条件
@Group   varchar ( 1000 =   NULL ,   -- 分组
@isCount   bit   =   0       -- 1    --是否获得总记录数
AS
--
--
select * from GL_NEWS order by GN_UPDATE_DATE DESC
--
exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0
DECLARE   @strFilter   varchar ( 2000 )
declare   @sql   varchar ( 8000 )
IF   @Filter   IS   NOT   NULL   AND   @Filter   !=   ''
  
BEGIN
   
SET   @strFilter   =   '  WHERE  '   +   @Filter   +   '   '
  
END
ELSE
  
BEGIN
   
SET   @strFilter   =   ''
  
END

if   @isCount   =   1   -- 只获得记录条数
     begin
        
set   @sql   =   ' SELECT  Count(*) FROM  '   +   @Tables   +   @strFilter   
    
end
else
begin
if   @Sort   =   ''
  
set   @Sort   =   @PK   +   '  DESC  '

IF   @PageNumber   <   1
  
SET   @PageNumber   =   1

if   @PageNumber   =   1   -- 第一页提高性能
begin  
  
set   @sql   =   ' select top  '   +   str ( @PageSize + '   ' + @Fields +   '   from  '   +   @Tables   +   '   '   +   @strFilter   +   '  ORDER BY   ' +   @Sort
end  
else
  
begin
/*Execute dynamic query*/     
   
DECLARE   @START_ID   varchar ( 50 )
DECLARE   @END_ID   varchar ( 50 )
SET   @START_ID   =   convert ( varchar ( 50 ),( @PageNumber   -   1 *   @PageSize   +   1 )
SET   @END_ID   =   convert ( varchar ( 50 ), @PageNumber   *   @PageSize )
    
set   @sql   =    '  SELECT  ' + @Fields +   '
   FROM (SELECT ROW_NUMBER() OVER(ORDER BY 
' + @Sort + ' ) AS rownum, 
     
' + @Fields +   '
      FROM 
' ' +@strFilter+ + @Tables +' ' ) AS D
   WHERE rownum BETWEEN 
' + @START_ID + '  AND  '   + @END_ID   + '  ORDER BY  ' + @Sort
  
END

END
-- print @sql

EXEC ( @sql )

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值