数据库开发与管理触发器.pptxVIP

  • 3
  • 0
  • 约4.18千字
  • 约 34页
  • 2022-05-15 发布于北京
  • 举报
8.8.1 存储过程;8.8.1.2 存储过程的创建与执行;8.8.1.2 存储过程的创建与执行;8.8.1.2 存储过程的创建与执行;存储过程的创建与执行;(5)使用带OUPUT参数的存储过程。 【例8.6】 创建一个存储过程do_insert,作用是向XSB表中插入一行数据。创建另外一个存储过程do_action,在其中调用第一个存储过程,并根据条件处理该行数据,处理后输出相应的信息。 第一个存储过程: CREATE PROCEDURE dbo.do_insert AS INSERT INTO XSB VALUES(091201, 陶伟, 1, 1990-03-05, 软件工程,50, NULL); ;第二个存储过程: CREATE PROCEDURE do_action @X bit, @STR CHAR(8) OUTPUT AS BEGIN EXEC do_insert IF @X=0 BEGIN UPDATE XSB SET 姓名=刘英, 性别=0 WHERE 学号=091201 SET @STR=修改成功 END ELSE IF @X=1 BEGIN DELETE FROM XSB WHERE 学号=091201 SET @STR=删除成功 END END ;接下来执行存储过程do_action来查看结果: DECLARE @str char(8) EXEC dbo.do_action 0, @str OUTPUT SELECT @str 执行结果如下: ;存储过程的修改;存储过程的删除;界面方式操作存储过程;界面方式操作存储过程;界面方式操作存储过程;触发器;触发器的创建;【例8.10】 创建一个表table1,其中只有一列a。在表上创建一个触发器,每次插入操作时,将变量@str的值设为“TRIGGER IS WORKING”并显示。 CREATE TABLE table1(a int) GO CREATE TRIGGER table1_insert --触发器名 ON table1 AFTER INSERT --表名 AS BEGIN DECLARE @str char(50) SET @str=TRIGGER IS WORKING PRINT @str END ;临时表inserted和deleted;向table1中插入一行数据: INSERT INTO table1 VALUES(10) 执行结果如下: ;【例8.11】 创建insert触发器,当向sc表中插入一个学生的成绩时,将stu表中该学生的总学分加上添加的课程的学分。;创建DELETE触发器。 【例8.13】 在删除stu表中的一条学生记录时将sc表中该学生的相应记录也删除。(保证没有设置外键级联);创建UPDATE触发器。UPDATE触发器在对触发器表执行UPDATE语句后触发。在执行UPDATE触发器时,将触发器表的原记录保存到deleted临时表中,将修改后的记录保存到inserted临时表中。 【例8.12】 创???触发器,当修改stu表中的学号时,同时也要将sc表中的学号修改成相应的学号(假设stu表和sc表之间有定义外键约束)。;【例8.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 ? ;(6)创建INSTEAD OF触发器。AFTER触发器是在触发语句执行后触发的,与AFTER触发器不同的是,INSTEAD OF触发器触发时只执行触发器内部的SQL语句,而不执行激活该触发器的SQL语句。一个表或视图中只能有一个INSTEAD OF触发器。 【例8.15】 创建表table2,值包含一列a,在表中创建INSTEAD OF INSERT触发器,当向表中插入记录时显示相应消息。 USE PXSCJ GO CREATE TABLE table2(a int) GO CREATE TRI

文档评论(0)

1亿VIP精品文档

相关文档