购物车的存储过程学习

存储过程|购物车

从来没有接触过存储过程,为了这个项目写了几个存储过程。就当是学习了,呵呵,这个购物车的存储过程中使用了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

 

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

时间: 2024-11-17 10:12:24

购物车的存储过程学习的相关文章

积分获取和消费的存储过程学习示例

  这篇文章主要介绍了积分获取和消费的存储过程学习示例,这个只是学习一下存储过程的使用方法,需要的朋友可以参考下 1.GM_JF客户账户积分表 2. GM_JF_DETAIL客户账户积分消费记录 3. GM_JF_ACTION _RULES积分动作规则表 4.GM_JF_GOODS _RULES积分商品规则表   -- ===============测试======================================================= /* declare @Stat

MySql存储过程学习知识小结_Mysql

什么是存储过程: 存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了. 存储过程的好处: 1.由于数据库执行动作时,是先编译后执行的.然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高. 2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率. 3.通过存储过程能够使没有权限的

MySql的存储过程学习小结 附pdf文档下载_Mysql

存储过程是一种存储在数据库库中的程序(就像正规语言里的子程序一样),准确的来说,MySql支持的"routine(例程)"有两种:一是我们说的存储过程,二是在其它sql语句中可以返回值的函数(使用起来和mysql预装载的函数一样,如pi()). 一个存储过程包括名字,参数列表,以及可以包括很多sql语句的sql语句集.在这里对局部变量,异常处理,循环控制和if条件语句有新的语法定义. 下面是一个包括存储过程的实例声明: 复制代码 代码如下: CREATE PROCEDURE proce

MSSQL存储过程学习笔记一 关于存储过程_MsSql

一. 存储过程的概念,优点,语法 在写笔记之前,首先需要整理好这些概念性的东西,否则的话,就会在概念上产生陌生或者是混淆的感觉. 概念:将常用的或者是很复杂的工作,预先利用SQL语句写好并用一个指定的名称存储起来,那么以后要是调用这些SQL语句的时候,只需要利用Execute/Exec执行以下,即可. 优点:当然了,使用存储过程的优点是很多的,下面来一一说明. 1. 存储过程只是在创造的时候进行编译,以后每次执行的时候,就不需要编译了,但是直接利用SQL的话,需要每次运行的时候都重新编译一次,所

mySql-数据库之存储过程学习总结

之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. MySQL存储过程 1.1.CREATE  PROCEDURE  (创建)CREATE PROCEDURE存储过程名 (参数列表)   BEGIN         SQL语句代码块END注意:由括号包围的参数列必须总是存在.如果没有参数,也该使用一个空参数列().每个参数默认都是一个IN参数.要指定为其

MSSQL存储过程学习笔记一 关于存储过程

一. 存储过程的概念,优点,语法 在写笔记之前,首先需要整理好这些概念性的东西,否则的话,就会在概念上产生陌生或者是混淆的感觉. 概念:将常用的或者是很复杂的工作,预先利用SQL语句写好并用一个指定的名称存储起来,那么以后要是调用这些SQL语句的时候,只需要利用Execute/Exec执行以下,即可. 优点:当然了,使用存储过程的优点是很多的,下面来一一说明. 1. 存储过程只是在创造的时候进行编译,以后每次执行的时候,就不需要编译了,但是直接利用SQL的话,需要每次运行的时候都重新编译一次,所

MSSQL数据库:存储过程学习

存储过程|数据|数据库 这个例子里面我们从两个表中取出头两行,然后合并到一个表中. 在现实中我们常常会遇到这样的情况,在一个数据库中存在两个表,假设表1储存着公司个产品本季度销售信息,表2储存着公司本季度欠款金额情况.在一个页面中我们想把这两个信息显示出来.通常的做法是在程序中进行两次SQL查询,返回两个结果集,在分别显示出来,非常麻烦. 下面是实现这个功能的代码: CREATE PROCEDURE test AS  SET NOCOUNT ON --指示存储过程不返回查询影响的行数  DECL

我的存储过程学习2

存储过程 业务系统需要一个关于合同状态的报表,主要显示合同的状态,地区,合同客户类型,合同金额,利息金额等信息.在数据库中存在4个表crec01c,sysc01,sysc03d,crmc02分别是'合同主表','区域及业务伙伴','系统状态代码','法人信息表'下面第一个存储过程是我第一次写的,执行时间是5秒 ------------------效率较差的存储过程--------------------------- CREATE TABLE #tmptba --创建一个临时表,用于储存我们的结

sql存储过程学习实例

什么是存储过程呢? 定义: 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令. 讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊? Microsoft公司为什么还要添加这个技术呢? 那么存储过程与一般的SQL语句有什么区别呢? 存储过程的优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以