嵌套触发器
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、 任何一个触发器都可以包含影响同一个表或另一个表的Update、Insert或Delete语句。如果启用递归触发器选项,那么改变表中的数据的触发器,通过递归执行就可以再次触发自己。在数据库创建时,默认情况下递归触发器选项是禁用的,单可以使用Alter Delete语句来启用它。
2、 递归触发器具有复杂性,可以用它来解决诸如自引用关系这样的复杂关系。使用递归触发器时,需要考虑以下事项和原则:
l 递归触发器很复杂,必须经过有条理的设计和测试;
l 在任意点的修改会引发一系列触发器。尽管提供处理复杂关系的能力,但是如果表要求以特定的顺序更新用户的表时,使用递归触发器会产生问题。
l 所有触发器一起构成一个大事物。任何触发器中的任何位置上的RollBack命令都将取消所有数据输入。所有数据均被擦除,并且无任何数据将被放到表中。
l 触发器最多只能递归16层。换句话说,如果递归链中的第16个触发器激活了第17个触发器,则结果与发布RollBack命令一样,所有数据将被擦除。