SqlServer触发器的原理及案例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
触发器
⏹触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化(INSERT、
UPDATE 或DELETE)时自动执行
⏹触发器可以查询其它表,并可以包含复杂的Transact-SQL 语句
⏹主要用于强制复杂的业务规则或要求
优点
⏹自动执行
⏹实现相关表层叠修改,实现多个表之间数据的一致性和完整性
⏹实现比check约束更复杂的限制,可以引用其他表中的列
触发器的类型
⏹AFTER触发器:在数据变动(INSERT、UPDATE、DELETE操作)完成后激发,只能在表
上定义,同一个表中可以有多个AFTER触发器
⏹INSTEAD OF触发器:在数据变动以前被激发,并取代变动数据(INSERT、UPDATE、
DELETE操作),转而去执行触发器定义的操作,可以定义在表或视图上,每个update、insert和delete语句最多可以定义一个INSTEAD OF触发器。
创建触发器
⏹CREATE TRIGGER trigger_name
ON { table | view } [ WITH ENCRYPTION ]
{
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [, ][DELETE]}
AS
sql_statement [...n ]
}
触发器示例:
⏹CREATE TRIGGER reminder ON titles FOR INSERT, UPDATE
AS
RAISERROR (50009, 16, 10)
指定触发器何时激发
⏹AFTER 触发器在触发操作(INSERT、UPDATE 或DELETE)后和处理完任何约束后激
发。可通过指定AFTER 或FOR 关键字来请求AFTER 触发器。
⏹INSTEAD OF 触发器代替触发动作进行激发,并在处理约束之前激发。
⏹对于每个触发操作(UPDATE、DELETE 和INSERT),每个表或视图只能有一个
INSTEAD OF 触发器。而一个表对于每个触发操作可以有多个AFTER 触发器。
触发器示例:
create TRIGGER reminder
ON titles
FOR INSERT, delete,update
AS
--修改操作
if (select count(*) from inserted) > 0 and (select count(*) from deleted) >0
begin
RAISERROR ('修改成功', 16, 10)
end
--插入操作
if (select count(*) from inserted) > 0 and (select count(*) from deleted) = 0 begin
RAISERROR ('插入成功', 16, 10)
end
--删除操作
if (select count(*) from inserted) = 0 and (select count(*) from deleted) >0 begin
RAISERROR ('删除成功', 16, 10)
end