购物车的存储过程学习

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

从来没有接触过存储过程,为了这个项目写了几个存储过程。就当是学习了

,呵呵,这个购物车的存储过程中使用了Table(表),Cursor(游标)变量。

要求如下:

一个商品表[Ware],里面包含有的字段有ID,MarketPrice,MemberPrice,VipPrice等等,还一个会员购物车[MemberCar]数据表。包括的有ID,MemberID,WareID,WareNum等等。现要求是能取得购物车表里的所有数据和MarketPrice*WareNum(所有商品和)的总价钱,即有N件商品就获取这N件商品的总价钱而不是单一的价钱。本来在客户端里直接根据购物车[MemberCar]表的数据读取商品表[Ware]里的数据,再用变量累加即可的。但问题却是,购物车里的所有商品显示使用了分页显示。所以累加时就出问题,如果为了累加这些价钱而在分页循环显示后再加一个循环所有记录来累加价钱数据,这样不是不行,但效率就可想而知了!!!

现一个解决方法就是,重新构造一个购物车表的镜像,但却多了商品的几个价钱总数字段。即MarketPrice*WareNum(单一商品)。从而读取购物车时不是读取原来购物车数据表,而是读取这个镜像数据表,并在读取时累加这些总价钱。

存储过程代码如下:

----#####################################################################################

----# 过程作用:返回用户购物车里的所有数据,并包含统计了商品的价钱 (价钱=商品表的价格*购物车表里的数量)

----# 作者:死在水中的鱼

----# 日期:2004年10月15日

----#####################################################################################

CREATE PROCEDURE MemberCar_Info @MemberID INT AS

--使用此句才能保持客户端的数据

SET NOCOUNT ON

DECLARE @Car_ID int,@Car_WareID int,@Car_WareNum smallINt

DECLARE @Car_TotalMemberPrice Numeric(8,2),@Car_TotalMarketPrice Numeric(8,2),@Car_TotalVipPrice Numeric(8,2)

--定义一个查询MemberCar表的游标变量。获取数据

DECLARE Car_Cursor Cursor For

Select ID,WareID,WareNum From [MemberCar] Where MemberID=@MemberID And IsPay=0

--建立一个临时表变量

DECLARE @Car_Table Table (ID INT,

WareID INT,WareNum SmallINT,MarketPrice Numeric(8,2),MemberPrice Numeric(8,2),VipPrice Numeric(8,2))

--打开MemberCar表提取数据到临时变量

OPEN Car_Cursor

FETCH NEXT FROM Car_Cursor INTO @Car_ID,@Car_WareID,@Car_WareNum

WHILE @@FETCH_STATUS = 0

BEGIN

--取得商品的总市场价、总会员价和总VIP价

Select @Car_TotalMarketPrice=MarketPrice*@Car_WareNum,@Car_TotalMemberPrice=MemberPrice*@Car_WareNum,@Car_TotalVipPrice=VipPrice*@Car_WareNum From [Ware] Where ID=@Car_WareID

--添加进临时变量表

INSERT INTO @Car_Table (ID,WareID,WareNum,MarketPrice,MemberPrice,VipPrice) Values (@Car_ID,@Car_WareID,@Car_WareNum,@Car_TotalMarketPrice,@Car_TotalMemberPrice,@Car_TotalVipPrice)

-- 没有到表尾,继续提取数据到临时变量

FETCH NEXT FROM Car_Cursor INTO @Car_ID,@Car_WareID,@Car_WareNum

END

--关闭MemberCar数据库的游标

CLOSE Car_Cursor

DEALLOCATE Car_Cursor

--返回最终数据表

SELECT * FROM @Car_Table

GO

要求表达不是很清楚,各位原谅...

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航