第四章 存储过程、触发器和数据完整性(2016).pptVIP

  • 30
  • 0
  • 约1.43万字
  • 约 57页
  • 2019-10-15 发布于湖北
  • 举报

第四章 存储过程、触发器和数据完整性(2016).ppt

修改上述触发器,使触发器适合删除了多条记录的情况: CREATE TRIGGER tr3_stock ON stock FOR DELETE AS DELETE FROM out_stock WHERE mat_num in ( select mat_num from deleted) 3.UPDATE触发器 该触发器在用户发出UPDATE语句后触发执行,即为用户修改数据行增加限制规则。 UPDATE触发器合并了DELETE触发器和INSERT触发器的作用。 在用户执行了UPDATE语句后,原来的数据行从基本表中删除,但保存在DELETED表中,同时基本表更新后的新数据行也在INSERTED表中保存了一个副本。 可利用DELETED表和INSERTED表,获取更新前后的数据行,完成比较操作。 4.3.2 创建触发器 【例4.14】创建一个UPDATE触发器,当用户更新stock表中的数据时,从INSERTED表中读取修改的新的amount值,如果该值小于1,将撤销更新操作;触发器从DELETED表中查询中修改前的值,将其重新更新到stock表中。 4.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 【例4.15】修改前面创建的UPDATE触发器,使其先检测更新的列,当更新warehouse列时,禁止更新;当更新库存量amount列时,设置更新规则,若更新后的值小于1,则撤销该更新操作。 4.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 例:审计表:对学生数据库,当用户修改成绩时,系统自动记录如下信息:修改前的成绩、修改后的成绩,学号、课号、修改该记录的用户名,修改的日期时间。 创建一个审计表audit(user_name,date,sno,cno,new_grade,old_grade) 当修改成绩时: update sc set grade=90 where …. 自动往audit表中添加一条记录。 Create trigger audit_sc on sc after update As begin declare @new_grade int,@old_grade int declare @sno char(8),@cno char(8) select @sno=sno,@cno=cno,@new_grade=grade from inserted select @old_grade=grade from deleted insert into audit(user_name,date,sno,cno,new_grade,old_grade) values(username(),getdate(),@sno,@cno,@new_grad

文档评论(0)

1亿VIP精品文档

相关文档