我想过成功,我想过失败,但是,我从来没有想过放弃。。。

嵌套触发器(递归触发器)

上一篇 / 下一篇  2012-06-21 15:21:40 / 个人分类:数据库

嵌套触发器

1、 如果一个触发器在执行操作时引发了另一个触发器,而这个触发器又接着引发下一个触发器,那么这些触发器就是嵌套触发器。

2、 案例

--创建存储过程:实现在新员工信息表(NewEmployee)中删除信息时触发员工信息表(Employee)添加相应新员工信息表中删除的人员信息

createtriggert_del2

onNewEmployee

fordelete

as

insertintoEmployee(员工编号,员工姓名,所在部门编号,所任职位,性别)

select员工编号,员工姓名,所在部门编号,所任职位,性别

fromdeleted

--创建存储过程:实现在员工信息表(Employee)中插入数据时部门信息表(DeptInfo)中的部门人数相应的增加

createtriggert_add

onEmployee

forinsert

as

updateDeptInfoset部门人数=部门人数+1

where部门编号=(select所在部门编号frominserted)

 

--执行删除操作:在新员工信息表(NewEmployee)中删除一个人员

deletefromNewEmployeewhere员工编号=3

 

 

--触发新员工信息表中员工编号为的记录被删除

select*fromNewEmployeewhere员工编号=3

--触发人员信息表中增加一条员工编号为的信息

select*fromEmployeewhere员工编号=3

--触发部门信息表中相应的部门人数增加

select部门人数fromDeptInfowhere部门编号='03'

递归触发器

1、 任何一个触发器都可以包含影响同一个表或另一个表的UpdateInsertDelete语句。如果启用递归触发器选项,那么改变表中的数据的触发器,通过递归执行就可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,单可以使用Alter Delete语句来启用它。

2、 递归触发器具有复杂性,可以用它来解决诸如自引用关系这样的复杂关系。使用递归触发器时,需要考虑以下事项和原则:

l 递归触发器很复杂,必须经过有条理的设计和测试

l 在任意点的修改会引发一系列触发器。尽管提供处理复杂关系的能力,但是如果表要求以特定的顺序更新用户的表时,使用递归触发器会产生问题。

l 所有触发器一起构成一个大事物。任何触发器中的任何位置上的RollBack命令都将取消所有数据输入。所有数据均被擦除,并且无任何数据将被放到表中。

l 触发器最多只能递归16层。换句话说,如果递归链中的第16个触发器激活了第17个触发器,则结果与发布RollBack命令一样,所有数据将被擦除。

 


TAG:

 

评分:0

我来说两句

Open Toolbar