博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据库知识点滴(4)--实现分页

Posted on 2009-09-14 16:24  一刻  阅读(182)  评论(0)    收藏  举报
(1)实现分页功能前,先看下row_number()函数:针对select 语句返回的每一行,从1开始编号,赋予其连续的编号。
       比如:select  row_number() over (order by ProductID ) as row ,Description.
 (2) 使用表变量。
     declare @Product  Table
      (RowNumber  int,
       ProductID int,
       Description varchar(max),
       Price money)
   insert  into  @Product
   select  Row_Number()  over (order  by  ProductID)  as RowNumber,
               ProductID,Description,Price
   from Product
 (3)现在来实现分页(存储过程)。假如我们想把属于蓝色笔,并且价格都小于5的所有笔检索出来,显示描述(Description)和ProductID,和类名.每页显示2条数据,当前页为第二页。
     declare  @NewsDetail table
     (RowNumber int,
       ProductID int ,
       ClassName varchar(50),
       Description varchar(max))
   insert into @NewsDetail
   select Row_Number over (order by ProductID) ,ProductID,ClassName,Description
   from
-- ----  一个联合查询,前面提过
   (
    select  p.ProductID ,c.ClassName,p.Description from
    ClassProduct cp  inner join Class  c   on  cp.ClassID=c.ClassID
    inner join Product p on  p.ProductID=cp.ProductID
    where  c.ClassName='blue'  and   p.Price<5)
  as NewTable
 ---全部查出来看下效果
select  * from   @NewsDetail
(4)现在开始写存储过程,需要三个输入参数 @CurrentPage当前是第几页,@PerPage每页显示几条数据,输出参数HowManyCount总共多少条数据。
    create  procedure   GetProductsInCurrentPage
    (@CurrentPage int ,
     @Perpage int  ,
     @HowManyCount   int  output)
  as
         declare  @NewsDetail table
     (RowNumber int,
       ProductID int ,
       ClassName varchar(50),
       Description varchar(max))
   insert into @NewsDetail
   select Row_Number() over (order by ProductID) ,ProductID,ClassName,Description
   from
     -- 联合查询,前面提过
   (
    select  p.ProductID ,c.ClassName,p.Description from
    ClassProduct cp  inner join Class  c   on  cp.ClassID=c.ClassID
    inner join Product p on  p.ProductID=cp.ProductID
    where  c.ClassName='blue'  and   p.Price<5)
  as NewTable
--查询出来
  select  * from @NewsDetail  where
 rownumber>(@CurrentPage-1)*@PerPage  and rownumber<=@CurrentPage*@PerPage
  select @HowManyCount=count(ProductID) from @NewDetails