SQL 分页

以前(大概一年前吧)看见一个人写的一片文章说的只用SQL 分页
嗯,具体思想很简单,就是反查再正查,比起用去差集的那种思想要快。
当时我也就记得那么多了,具体的代码我都没有记住
今天项目需要,我跟我MM机遇这种思想,从新实现一次
具体代码如下: (SQL-Server 2005下测试通过)

ALTER   PROCEDURE   [ dbo ] . [ SP_WebContentPager ]
    
@pagesize   int ,
    
@pageid   int ,
    
@boardid   int
AS
BEGIN
--     declare @pagesize int;
--
    declare @pageid int;
     declare   @totalCount   int ;
    
declare   @tail   int ;
    
declare   @SQL   varchar  ( 5000 );
--     select @pagesize = 2;
--
    select @pageid = 2;

    
select   @totalCount   =   count ( * from  dbo.WebContent  where  BoardID = @boardid ;

    
select   @tail   =   @pagesize   *   @pageid ;
    
if    @tail   >   @totalCount  
        
begin
            
select   @SQL   =   ' select top  '  
                
+   convert  (  varchar ( 50 ) ,  @totalCount % @pagesize  )  --  求模运算符有问题mod(@totalCount,@pagesize)
                 +   '  * from dbo.WebContent where BoardID= '
                
+   convert  (  varchar ( 50 ) ,  @boardid )
                
+   '  order by CID asc ' ;
        
end


    
else
        
begin

            
select   @SQL   =   ' select top  ' ;
            
select   @SQL   =   @SQL   +   convert  (  varchar ( 50 ) ,  @tail );
            
select   @SQL   =    @SQL   +   '  CID from dbo.WebContent  '
                
+   '  where boardid= '   +   convert  (  varchar ( 50 ) ,  @boardid )
                
+   '  order by CID desc '

            
select   @SQL   =   ' select top  ' + convert  (  varchar ( 50 ) ,  @pagesize )
                
+ '  CID from dbo.WebContent where CID in( '  
                
+   @SQL  
                
+   ' )order by CID asc '

            
select   @SQL   =   ' select * from dbo.WebContent where CID in( '  
                
+   @SQL
                
+   ' )order by CID DESC '
        
end


    
-- print @SQL;
     exec  ( @SQL );
END

有个小问题是求模运算符那里,好像Sql-Server 2000 是MOD(X,Y)的吧。
这里加如一个IF 判断,是为了在最后一页正确显示的。
我的SQL还是不是太熟练,希望大家一起讨论。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值