新SQL Server 数据库教程 2008版 教学课件 郑阿奇 刘启芬 顾韵华 第7章 存储过程和触发器.pptVIP

  • 14
  • 0
  • 约1.07万字
  • 约 39页
  • 2016-10-26 发布于广东
  • 举报

新SQL Server 数据库教程 2008版 教学课件 郑阿奇 刘启芬 顾韵华 第7章 存储过程和触发器.ppt

7.2.2 触发器的创建 【例7.14】 在KCB表中创建UPDATE和DELETE触发器,当修改或删除KCB表中的“课程号”字段时,同时修改或删除CJB表中的该课程号。 CREATE TRIGGER kcb_trig ON KCB AFTER UPDATE, DELETE AS BEGIN IF (UPDATE(课程号)) UPDATE CJB SET 课程号=(SELECT 课程号 FROM inserted) WHERE 课程号=(SELECT 课程号 FROM deleted) ELSE DELETE FROM CJB WHERE 课程号 IN(SELECT 课程号 FROM deleted) END 7.2.2 触发器的创建 (6)创建INSTEAD OF触发器。AFTER触发器是在触发语句执行后触发的,与AFTER触发器不同的是,INSTEAD OF触发器触发时只执行触发器内部的SQL语句,而不执行激活该触发器的SQL语句。一个表或视图中只能有一个INSTEAD OF触发器。 【例7.15】 创建表table2,值包含一列a,在表中创建INSTEAD OF INSERT触发器,当向表中插入记录时显示相应消息。 USE PXSCJ GO CREATE TABLE table2(a int) GO CREATE TRIGGER table2_insert ON table2 INSTEAD OF INSERT AS PRINT INSTEAD OF TRIGGER IS WORKING 向表中插入一行数据: INSERT INTO table2 VALUES(10) 执行结果如下: 7.2.2 触发器的创建 【例7.16】 在PXSCJ数据库中创建视图stu_view,包含学生学号、专业、课程号、成绩。该视图依赖于表XSB和CJB,是不可更新视图。可以在视图上创建INSTEAD OF触发器,当向视图中插入数据时分别向表XSB和CJB插入数据,从而实现向视图插入数据的功能。 首先创建视图: CREATE VIEW stu_view AS SELECT XSB.学号, 专业, 课程号, 成绩 ?FROM XSB, CJB ?WHERE XSB.学号=CJB.学号 7.2.2 触发器的创建 向视图插入一行数据: INSERT INTO stu_view VALUES(091102, 计算机, 101, 85 ) 查看数据是否插入: SELECT * FROM stu_view WHERE 学号= 091102 执行结果如下: 查看与视图关联的XSB表的情况: SELECT * FROM XSB WHERE 学号= 091102 执行结果如下: 7.2.2 触发器的创建 2.创建DDL触发器 语法格式: CREATE TRIGGER trigger_name ON { ALL SERVER | DATABASE } [ WITH ENCRYPTION ] { FOR | AFTER } { event_type | event_group } [ ,...n ] AS sql_statement [ ; ] [ ...n ] 7.2.2 触发器的创建 【例7.17】 创建PXSCJ数据库作用域的DDL触发器,当删除一个表时,提示禁止该操作,然后回滚删除表的操作。 USE PXSCJ GO CREATE TRIGGER safety ON DATABASE AFTER DROP_TABLE AS PRINT 不能删除该表 ROLLBACK TRANSACTION 尝试删除表table1: DROP TABLE table1 执行结果如下: 7.2.2 触发器的创建 【例7.18】 创建服务器作用域的DDL触发器,当删除一个数据库时,提示禁止该操作并回滚删除数据库的操作。 CREATE TRIGGER safety_server ON ALL SERVER AFTER DROP_DATABASE AS PRINT 不能删除该数据库 ROLLBACK TRANSACTION 7.2.3 触发器的修改 (1)修改DML触发器的语法格式: ALTER TRIGGER schema_name.trigger_name ON ( table | view ) [ WITH ENCRYPTION ] ( AFTER | INSTEAD OF ) { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } AS? sql_statement [

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档