内容正文:
SQL Server 2019高级应用
第9章
目录
01
T-SQL编程基础
02
游标
03
存储过程
04
触发器
本章主要内容
本章主要阐述T-SQL的标识符、运算符、表达式、函数、变量与常量、流程控制语句等基础知识,并结合实例探讨T-SQL最常见的应用,分析游标的基本原理和使用方法,重点介绍使用T-SQL创建、管理存储过程和触发器。
触发器
第9章
04
9.4.1 触发器的概念和工作原理
1. 触发器的概念
触发器是一组T-SQL语句,是在对表进行插入、更新或删除操作时自动执行的存储过程。与存储过程相比,二者的不同点主要体现在:触发器不能使用EXECUTE语句,由用户使用T-SQL语句时自动触发,是自动执行的且不含参数。
触发器的特点是:它是一种在基本表被修改时自动执行的内嵌过程,主要通过事件或动作进行触发而被执行;它不像存储过程能通过名称被直接调用,更不允许带参数;它主要用于约束、默认值和规则的完整性检查,实施更加复杂的业务规则。
9.4.1 触发器的概念和工作原理
2. 触发器的分类
SQL Server包括3种常规类型的触发器:DML触发器、DDL触发器和登录触发器。
(1)DML触发器
DML触发器是作用在表或视图上的一种触发器,当数据库服务器中发生数据操作(插入、修改、删除)事件时执行相关操作。主要有以下3种。
① INSERT触发器:向表中插入数据时被触发。
② DELETE触发器:从表中删除数据时被触发。
③ UPDATE触发器:修改表中数据时被触发。
9.4.1 触发器的概念和工作原理
(2)DDL触发器
DDL触发器是当服务器或者数据库中发生以CREATE、DROP、ALTER开头的语句事件时被激活使用。使用DDL触发器可以防止对数据架构进行某些更改或记录数据中的更改及事件操作。
(3)登录触发器
登录触发器是由登录(LOGON)事件而激活的触发器。登录触发器将在用户身份验证阶段完成之后且用户会话实际建立之前被激发。如果身份验证失败,将不激发登录触发器。
9.4.1 触发器的概念和工作原理
2. 触发器的工作原理
每个触发器自动在内存中创建两个特殊的表:插入表(Inserted表)和删除表(Deleted表)。两个表均为只读的逻辑虚表,其表结构与触发器所作用的表的表结构相同。用户无权对其直接修改,触发器工作完成后自动删除这两个表。
9.4.1 触发器的概念和工作原理
2. 触发器的工作原理
Inserted表临时保存插入或更新后的记录行,可以利用此表检查插入的数据是否满足实际的业务需求。如果满足,接受操作;如果不满足,则向用户报告错误消息,并回滚操作。Deleted表临时保存删除或更新前的记录行,可以利用此表检查被删除的数据是否满足实际的业务需求。如果满足,接受操作;如果不满足,则向用户报告错误消息,并回滚操作。
9.4.2 创建触发器
SQL Server 2019提供给用户两种方式创建触发器:使用CREATE TRIGGER语句或使用Management Studio可视化界面。
1.创建DML触发器-----使用CREATE TRIGGER语句创建DML触发器
语法格式如下:
CREATE TRIGGER trigger_name
ON { table_name|view }
[WITH ENCRYPTION]
{FOR | AFTER | INSTEAD OF}
{[DELETE] [,] [INSERT] [,] [UPDATE]}
AS
sql_statement [;]
9.4.2 创建触发器
【例9.17】使用触发器级联删除,当删除课程表的某一课程信息时,级联删除其成绩信息。
CREATE TRIGGER del_c ON course
AFTER DELETE
AS
DELETE FROM SC
WHERE CNO IN
(SELECT CNO FROM deleted)
9.4.2 创建触发器
【例9.18】使用触发器,当更新SC表的成绩信息时,要求成绩的取值范围为0~100。
CREATE TRIGGER up_sc ON SC
AFTER UPDATE
AS
IF ( SELECT Score FROM INSERTED ) NOT BETWEEN 0 AND 100
BEGIN
PRINT '成绩取值范围应在0~100!'
ROLLBACK TRANSACTION
END
ELSE
PRINT '更新成功!'
9.4.2 创建触发器
1.创建DML触发器-----使用