SqlServer触发器的原理及案例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档