嵌套触发器

来源:互联网 发布:ubuntu文件夹有锁 编辑:程序博客网 时间:2024/05/18 00:30
嵌套触发器


当某一触发器执行时,能够触发另一个触发器,这种情况下称之为触发器嵌套。在执行过程中,如果一个触发器修改某个表时,而这个表有其他触发器,这时就使用了嵌套触发器。在SQL server 中,触发器能够嵌套至32层。如果不需要嵌套触发器,可以通过sp_configure 选项进行设置。


Oracle 不支持嵌套触发器


创建DELETE 触发器A_delete,实现每次只能从Author 表中删除一条记录,同时删除book表中与之对应的记录。为BOOK 表创建DELETE触发器 B_delete,每次只能删除book表中的一条记录。实现代码如下:


create  trigger  A_delete
on Author
for  Delete  as
declare  @rowcount  int
select  @rowcount = @@ROWCOUNT
if @rowcount>1
begin
  rollback transaction
  raiserror('当前要删除的记录数为%d,一次只允许删除一行记录!',16,1,@rowcount)
end
else
   declare  @Author  char(8)
   select  @Author  = Author
   from  deleted
   delete book
    where  Author = @Author


create  trigger  B_delete
on book
for  delete  as
declare  @rowcount  int
select  @rowcount = @@ROWCOUNT
if @rowcount>1
begin
  rollback transaction
  raiserror('当前要删除的记录数为%d,一次只允许删除一行记录!',16,1,@rowcount)
end
else
   print 'Author 表和book 表中相应的数据均被删除'





递归触发器


sp_dboption  'dbName','Recursive Triggers',TRUE


dbName 为数据库名。如果把最后的参数由“True”变为“FALSE”,则为禁止数据库直接递归操作。
0 0
原创粉丝点击