数据库原理实验10.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库原理实验10

实验十触发器1 实验目的与要求(1) 掌握触发器的创建和使用方法。(2) 掌握游标和触发器的综合应用方法。2 实验内容请完成下面实验内容:(1) 创建触发器,该触发器仅允许“dbo”用户可以删除Employee表内数据。脚本:createtrigger employeedelete on employee48fordeleteasifexists(select*from deleted)beginifuser!=dbobeginprint出错了!rollbackendend结果:测试如下: (2) 创建触发器,当向订单明细表添加销售明细数据时,统计该订单销售金额。要求:如果订单金额5000元及以上,则该订单中销售的所有商品按9折进行优惠处理(更新订单明细表中成交价格),同时还应更新订单总表中该订单的订单金额。脚本:触发器脚本:altertrigger OrDetailinsert on OrderDetail48 forinsertasdeclare @ordersum numeric(8,2)declare @orderNo char(12),@productNo char(12), @tot numeric(8,2),@jilu char(12)declare cur_ordetail cursorfor--建立插入表游标select orderNo48,productNo48,quantity48*price48 as total from Insertedopen cur_ordetailbegintransactioncreatetable linshi --创建临时表(orderNo char(12)notnull,total numeric(8,2)nullconstraint linshipk primarykey(orderNo))set @ordersum=0.00 fetch cur_ordetail into @orderNo,@productNo,@totwhile(@@fetch_status=0)beginselect @ordersum=sum2 --计算插入明细各个订单的总金额from(select orderNo48,sum(quantity48*price48) sum2from orderDetail48groupby orderNo48) bwhere b.orderNo48=@orderNoif @orderNo in(select orderNo from linshi)--如果订单编号相同,就直接更新总金额beginupdate linshiset total=@ordersumwhere orderno=@orderNoendelse--否则就往临时表新插入数据insert linshi values(@orderNo,@ordersum)fetch cur_ordetail into @orderNo,@productNo,@totendclose cur_ordetaildeallocate cur_ordetaildeclare cur_linshi cursorfor--建立对临时表的游标,判断订单总金额是否5000select*from linshiopen cur_linshifetch cur_linshi into @orderNo,@totwhile(@@fetch_status=0)beginif @tot5000 --如果大于5000,怎将其所对应订单单价全部打九折beginupdate orderDetail48set price48=0.9*price48where orderdetail48.orderno48=@orderNoendfetch cur_linshi into @orderNo,@totendclose cur_linshideallocate cur_linshiupdate orderMaster48 --更新订单总表set orderSum48=sum2from(select orderNo48,sum(quantity48*price48) sum2from orderDetail48groupby orderNo48) bwhere orderMaster48.orderNo48=b.orderNo48droptable linshi --删除临时表committran--提交事务原图:明细表主表插入语句:Insert orderDetail48 values(200801090002,5,1080.00)其订单金额大于5000,可以看到20080109002这个订单所有的price均打了九折结果:

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档