- 1、本文档共55页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章_存储过程、触发器和数据完整性
3.UPDATE触发器 该触发器在用户发出UPDATE语句后触发执行,即为用户修改数据行增加限制规则。 UPDATE触发器合并了DELETE触发器和INSERT触发器的作用。 在用户执行了UPDATE语句后,原来的数据行从基本表中删除,但保存在DELETED表中,同时基本表更新后的新数据行也在INSERTED表中保存了一个副本。 可利用DELETED表和INSERTED表,获取更新前后的数据行,完成比较操作。 5.3.2 创建触发器 【例5.14】创建一个UPDATE触发器,当用户更新stock表中的数据时,从INSERTED表中读取修改的新的amount值,如果该值小于1,将撤销更新操作;触发器从DELETED表中查询中修改前的值,将其重新更新到stock表中。 5.3.2 创建触发器 CREATE TRIGGER tr4_stock ON stock FOR UPDATE AS DECLARE @amount_new int,@amount_old int, @mat_num char(10) SELECT @amount_new=amount,@mat_num=mat_num FROM INSERTED IF @amount_new1 BEGIN SELECT @amount_old=amount FROM DELETED UPDATE stock set amount=@amount_old WHERE mat_num=@mat_num PRINT the row can not be UPDATED! END 【例5.15】修改前面创建的UPDATE触发器,使其先检测更新的列,当更新warehouse列时,禁止更新;当更新库存量amount列时,设置更新规则,若更新后的值小于1,则撤销该更新操作。 5.3.2 创建触发器 CREATE TRIGGER tr5_stock ON stock FOR UPDATE AS DECLARE @amount int IF UPDATE(warehouse) BEGIN ROLLBACK TRAN PRINT 不允许修改物资存放仓库! END IF UPDATE(amount) BEGIN SELECT @amount=amount FROM INSERTED IF @amount1 BEGIN ROLLBACK TRAN PRINT 库存量小于1,不允许更新! END END 4. INSTEAD OF触发器 INSTEAD OF触发器为替代操作触发器,用于视图操作。因为视图有时显示的是表中的部分列,因此用视图修改基本表中的数据行时有可能导致失败。解决方法之一就是针对视图建立INSTEAD OF触发器,通过触发器插入所缺的列值,完成更新。 当视图执行到对基本表的插入、删除和更新操作时,用触发器的操作替代视图的操作。 注意:视图只能使用INSTEAD OF触发器,而不能直接使用INSERT、UPDATE和DELETE触发器。 5.3.2 创建触发器 【例5.16】创建一个INSTEAD OF触发器,在视图往基本表中插入数据行时,补充mat_num的列值。 5.3.2 创建触发器 首先生成基于stock表的视图view_stock,代码如下: CREATE VIEW view_stock AS SELECT mat_name,speci,warehouse,amount,unit FROM stock 若通过下面的语句向基本表中插入数据: INSERT INTO view_stock VALUES(护套绝缘电线,BVV-120,供电局1#仓库,10,110) 由于视图中不包括mat_num列,而基本表中主键mat_num不能为空,则该语句会出现错误。 解决办法: 创建一个INSTEAD OF触发器,在通过视图往基本表中插入数据时,补充mat_num列的值。 CREATE TRIGGER tr_viewstock ON view_stock INSTEAD OF INSERT AS DECLARE @mat_num char(10),@mat_name char(50), @speci char(50),@warehous
您可能关注的文档
最近下载
- 厦门东部三期垃圾焚烧发电厂项目环境影响报告书.pdf
- 2022火力发电厂化学系统智能化设计导则.docx
- MQY-202使用说明V1.2(增加CPA标志及使用说明).pdf VIP
- 国际课程课件系列之物理boardworks 5. Momentum v1.1.ppt
- 豫新船舶公司(原泥矶船厂)技术改造项目环评(新版环评)环境影响报告表.pdf
- 五年级下册综合实践活动课件-中国结——鞭炮结 全国通用 20张.pptx
- 企业风险防控清单.pdf
- 《风险管理》教案.docx
- 幼儿园保教设施设备配标准(2023版).doc
- INOVANCE汇川-中型PLC编程软件使用手册-AM400 AM600 AP700 AC700 AC800中文.pdf
文档评论(0)