文档详情

实验四-存储过程与触发器、函数.doc

发布:2017-02-21约4.81千字共7页下载文档
文本预览下载声明
《数据库原理》实验报告 题目:四 存储过程与触发器、函数 学号:2010810072 成 绩 姓名: 罗忠霖 计算1013 日期:2012.12.2 实验使用环境: WindowXP 、SQL Server 2005 实验内容与完成情况: 1、增加一张库存表,如下图: 程序代码 create table 库存表 ( 商品编码char(8) not null primary key , 商品进价money null, 库存数量int null, 入库时间datetime not null ) 运行结果 2、从Purchase (进货表)和Sell(销售表)中备份空记录表: PurchaseBak和Sell1Bak。 程序代码 if(not exists(select name from sysobjects where name=PurchaseBak ))--若不存PurchaseBak表则创建,否则不可以 (select * into PurchaseBak from Purchase where (1=0)) 运行结果 程序代码 if(not exists(select name from sysobjects where name=SelllBak ))--若不存在SelllBak表则创建,否则不可以 (select * into SelllBak from Purchase where (1=0)) 运行结果 3、创建一个触发器。向进货表中插入一条记录时,这个触发器都将更新库存表。如果库存有该类商品时,那么该商品的进价即为两次进价的平均值(因为每次的进价可能会不相同),库存量为原有库存加该次进货数量;(算法为:(库存商品进价*库存量+进货价*进货量)/(库存量+进货量);如果没有该商品,则插入到库存表中。 程序代码 create trigger tri_Purchase--触发器名字 on Purchase after insert as begin declare @进货价money,@进货数量int,@商品编码char(8), @库存数量int,@库商品进价money,@库商品编码char(8)--声明变量 select @商品编码=商品编码,@进货数量=数量,@进货价=进货价from inserted--取插入的商品信息 if(@商品编码in (select 商品编码from 库存表))--库存表里存在 begin select @库商品进价=商品进价,@库存数量=库存数量from 库存表where (商品编码=@库商品编码) update 库存表--更新库存表 set 商品进价=(@库商品进价*@库存数量+@进货价*@进货数量)/(@进货数量+@库存数量), 库存数量=(@进货数量+@库存数量),入库时间=getdate() where(商品编码=@商品编码) end else--库存表里不存在商品信息 insert into 库存表--插入进货信息 (商品编码,商品进价,库存数量,入库时间) values(@商品编码,@进货价,@进货数量,getdate()) end 运行结果 测试代码 insert into Purchase values(JH000001,iphone4,apple,4500,5000,100,2012-9-1,1001) select * from 库存表 select * from Purchase--查看表信息 测试结果 测试代码 insert into Purchase values(JH000001,iphone4,apple,4800,5300,100,2012-10-1,1001) 测试结果 4、创建一个触发器。向销售表中插入一条记录时,这个触发器将更新库存表。库存量为原有库存量减去销售数量。如果库存数量少于10,则显示”该商品库存数量少于10,请及时进货”;如果库存不足,则显示:“‘库存不足’”。 程序代码 crecreate trigger tri_Sell on Sell after insert as begin declare @售出数量int,@库存数量int,@售商品编码char(8) select @售出数量=数量,@售商品编码= 商品编号from inserted
显示全部
相似文档