分页的存储过程

      最近在做一些电子商务网站的系统,在对商品进行管理的时候,碰到了些问题在一页显示不完商品时,我们往往的会用到分页,在我以前我总是用手动的去分页,这样会损耗大量的系统资源,不能精确获取到我们想要的信息!为了解决此问题,我就用到了分页的存储过程,把它拿出来和大家分享下,希望能帮助到需要帮助的人!下面用一个我用到的例子来说明吧。

 

CREATE PROCEDURE GetProductsOnDepartmentPromotion
     (
        @DepartmentID INT,
        @DescriptionLength INT,
        @PageNumber INT,
        @ProductsPerPage INT,
        @HowManyProducts INT OUTPUT
     )
AS

 

--创建一张临时表
DECLARE @Products TABLE
  (
 RowNumber INT,
  ProductID INT,
  Name VARCHAR(50),
  Description VARCHAR(5000),
  Price MONEY,
  Image1FileName VARCHAR(50),
  Image2FileName VARCHAR(50),
  OnDepartmentPromotion BIT,
  OnCatalogPromotion BIT)


--向临时表中插入数据ROW_NUMBER() 是sqlsever2005系统函数
INSERT INTO @Products 
/*子查询*/ 
SELECT ROW_NUMBER() OVER (ORDER BY ProductID) AS Row,
       ProductID, Name, SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description,
       Price, Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion FROM
(
 --表的内连接
  SELECT DISTINCT Product.ProductID, Product.Name,

  --截取字符串
  SUBSTRING(Product.Description, 1, @DescriptionLength) + '...' AS Description,
  Price, Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
  FROM Product INNER JOIN ProductCategory
                      ON Product.ProductID = ProductCategory.ProductID
              INNER JOIN Category
                      ON ProductCategory.CategoryID = Category.CategoryID
   WHERE Product.OnDepartmentPromotion = 1
   AND Category.DepartmentID = @DepartmentID
)

 AS ProductOnDepPr --表的别名

 

--为输出参数赋值

SELECT @HowManyProducts = COUNT(ProductID) FROM @Products

--实现分页的功能
SELECT ProductID, Name, Description, Price, Image1FileName,
       Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
  FROM @Products
  WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage
  AND RowNumber <= @PageNumber * @ProductsPerPage

GO

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值