实验三 事务与存储过程.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三事务与存储过程

一、实验目的

掌握事务操作、游标操作、存储过程使用。二、实验步骤(一准备数据库

1、创建一个名为“ ERP ” +班号 +学号的数据库;

2、建立如下二维表:

客户表

产品表

订单表

订单明细表

(二事务操作

1、计算订单明细中的金额,等于单价乘以数量。

update T_订单明细 set 金额 =单价 *数量

2、将订单明细的金额在原有基础上加 10元,要求放在事务中执行,执行完毕提交事务 begin transaction

update T_订单明细 set 金额 =金额 +10

commit

3、将订单明细的金额在原有基础上减 10元,要求放在事务中执行,执行完毕回滚事务 begin transaction

update T_订单明细 set 金额 =金额 -10

rollback

4、在订单表以及订单明细表中将最后一张订单删除,要求使用事务。

begin transaction

delete from t_订单 where 订单编号 ='R004'

delete from t_订单明细 where 订单编号 ='R004'

commit

(三游标操作

在订单表中有一个总金额字段, 其值等于该订单中所有产品金额的和, 使用游标计算每一订单的总金额。

计算每笔订单总金额

--计算过程 :定义游标,取出每张订单的订单号

--根据订单号汇总明细,代替订单中的金额

--定义订单号、金额合计内存变量

declare @OrderNO varchar (4

declare @OrderSum numeric (12, 2

--定义游标

declare 订单 _Cur cursor for select 订单编号 from T_订单

--打开游标

open 订单 _Cur

--取出第一个记录

fetch next from 订单 Cur into @OrderNO

--循环,分别取每一个记录

while @@fetch_status=0

begin

select @OrderSum=(select (金额 from T_订单明细 =@OrderNO update T_订单 set 总金额 =@OrderSum where 订单编号 =@OrderNO fetch next from 订单 _Cur into @OrderNO

end

--关闭游标

close 订单 _Cur

--清除游标

deallocate 订单 Cur

end

go

(四存储过程

1、将上述 T-SQL 语句存到存储过程中,存储过程名为“ CalOrderSum ” 。

2、编写存储过程,名称为“ StatByCustNO ” ,根据指定的客户编号统计订单笔数及总金额, 将笔数及总金额能返回。

3、参昭上面的例子,新建一个存储过程,名称为“ StatByGoodsNO ” ,根据指定的产品编号统计订货批次总数及订货总数量,其中订货批次是指订单明细中该产品编号的记录个数。 CREATE PROCEDURE StatByBustNO

@CustNO varchar (4, @OrderCount int OUTPUT , @OrderSum numeric (12, 2 OUTPUT

--@CustNO接收客户信息

--@OrderCount订单笔数 OUTPUT 表示返回

--@OrderSum该客户订单总合计 OUTPUT 表示返回

AS

BEGIN

SELECT @OrderCount=(SELECT COUNT (*FROM T_订单 where 客户编号 =

@CustNO

SELECT @OrderCount=(SELECT sum (总金额 FROM T_订单 where 客户编号 = @CustNO

end

go

实验日期:2011-12-9 实验学时:4学时班级:10级计软本

学号:1010711032 姓名:孙微

相关文档
最新文档