sqlserver触发器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[例4] 删除学生表上的触发器Insert_Or_Update_Student
DROP TRIGGER Insert_Or_Update_Student;
试验
在SC表上建立触发器SC_1,当成绩大于100分 时,自动修改为100分。 通过UPDATE 和INSERT语句触发SC_1,检查 是否正确 删除触发器SC_1
5.6.1 定义触发器
5.6.2 激活触发器 5.6.3 删除触发器
5.6.2 激活触发器

触发器的执行,是由触发事件激活的,并由数据库服务器 自动执行 一个数据表上可能定义了多个触发器

激活触发器(续)
[例3]执行修改某个教师工资的SQL语句,激活
上述定义的触发器。 UPDATE student SET Sage=16 WHERE sno='95001'; 执行顺序是:
定义触发器(续)
[例2]定义触发器,当Student学号发生修 改时,自动在变化表S_log登记修改记录。
首先建立变化表S_log
CREATE TABLE S_log ( ID int Date ); IDENTITY (1, 1), DATETIME, sno char(10),
PRIMARY KEY(ID)
定义触发器(续)

定义触发器的语法说明:

1. 创建者:表的拥有者 2. 触发器名 3. 表名:触发器的目标表 4. 触发事件:INSERT、DELETE、UPDATE 5. 操作时机
FOR | AFTER
触发器里面的两个临时的表: Deleted , Inserted 分别表示触发事件的表“旧记录”和“新记 录”。
CREATE TRIGGER Update_S
ON student
FOR UPDATE AS if Update(Sno) /*触发事件是UPDATE */
BEGIN
INSERT INTO S_log SELECT SNO,CURRENT_TIMESTAMP FROM Deleted INSERT INTO S_log SELECT SNO,CURRENT_TIMESTAMP FROM Inserted END;

定义触发器(续)
[例2](续)
CREATE TRIGGER Insert_S ON student
FOR INSERT /*触发事件是INSERT*/
AS INSERT INTO S_log SELECT sno, CURRENT_TIMESTAMP FROM Inserted
5.6 触发器

定义触发器(续)
[例1]在student表上定义一个触发器,当插入或修改时,年龄 如果低于18岁,自动改为18岁。 CREATE TRIGGER Insert_Or_Update_Student ON Student FOR INSERT,UPDATE /*触发事件是插入或更新操作*/ AS /*定义触发动作体*/ Update Student Set Sage=18 From Student t ,Inserted i Where t.sno=i.sno AND i.Sage<18

执行以上SQL语句 执行触发器Insert_Or_Update_Student
5.6 触发器

5.6.1 定义触发器
5.6.2 激活触发器 5.6.3 删除触发器
5.6.3 P TRIGGER <触发器名>;

触发器必须是一个已经创建的触发器,并且只能由具有相 应权限的用户删除。
5.6 触发器

5.6.1 定义触发器
5.6.2 激活触发器 5.6.3 删除触发器
5.6.1 定义触发器
CREATE
TRIGGER语法格式
CREATE TRIGGER <触发器名> ON <表名> {FOR | AFTER} <操作时机> insert,update,delete <触发事件> as sql语句
相关文档
最新文档