use BalloonShop
select * from Product
--20个字,1, 5
CREATE PROCEDURE GetProductsOnCatalogPromotion
(@DescriptionLength INT,--描述信息长度
@PageNumber INT, -- 第几页
@ProductsPerPage INT, --每页显示几个商品
@HowManyProducts INT OUTPUT -- 一共有多少商品
)
AS
-- declare a new TABLE variable
DECLARE @Products TABLE --表变量
(RowNumber INT, --在products原始表上增加一个可靠的编号字段
ProductID INT,
Name VARCHAR(50),
Description VARCHAR(5000),
Price MONEY,
Image1FileName VARCHAR(50),
Image2FileName VARCHAR(50),
OnDepartmentPromotion BIT,
OnCatalogPromotion BIT)
-- populate the table variable with the complete list of products
INSERT INTO @Products
SELECT ROW_NUMBER() OVER (ORDER BY Product.ProductID),
ProductID, Name,
SUBSTRING(Description, 1, @DescriptionLength) + '...' AS Description,
Price, Image1FileName, Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM Product
WHERE OnCatalogPromotion = 1
-- 给输出参数@HowManyProducts赋值
SELECT @HowManyProducts = COUNT(ProductID) FROM @Products
-- extract the requested page of products
-- 把请求的第几页的内容从@Products表变量中查询出来
SELECT ProductID, Name, Description, Price, Image1FileName,
Image2FileName, OnDepartmentPromotion, OnCatalogPromotion
FROM @Products
WHERE RowNumber > (@PageNumber - 1) * @ProductsPerPage
AND RowNumber <= @PageNumber * @ProductsPerPage
GO
use BalloonShop
--理解表变量
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)
INSERT INTO @Products
SELECT Row_number() OVER (ORDER BY ProductID) , * from Product where OnCatalogPromotion = 1
select * from @Products
go
use BalloonShop
declare @HowManyProducts int
exec GetProductsOnCatalogPromotion 15,2,6, @HowManyProducts out
select @HowManyProducts
--一共多少页:总商品数/每页的产品数 (小数) = 2.1
-- ceiling