触发器

在新增时,没有Deleted这个表,只有Inserted表  
  在删除时,没有Inserted这个表,只有Deleted表  
  只有在Update时,才有这两个表  
  所以要看你的需要决定要建几个触发器



在触发器中,有两个特殊的逻辑表:  
  inserted   和   deleted  
   
  这两个表是系统自动生成的.  
  inserted中记录的是新增或修改后的内容  
  deleted中记录的是删除或修改前的内容   
   
例如有如下表:  
  a  
  id,name  
  1     aa  
  2     bb  
   
  1.新增  
  执行:insert   into   a(id,name)   values(3,'cc')  
  这时,在触发器中  
  inserted表的内容就是:  
  3   cc  
  deleted表内容为空  
   
  2.修改  
  执行:update   a   set   name=name+'1'   where   id<3  
  这时,在触发器中  
  inserted表的内容就是:  
  1   aa1  
  2   bb1  
  deleted表内容为空  
  1   aa  
  2   bb  
   
  3.删除  
  执行:delete   from   a   where   id=2  
  这时,在触发器中  
  inserted表的内容就是空  
  deleted表内容为空  
  2   bb   
    
  所以你的触发器可以这样写:  
  方法1  
  create   trigger   aa   on   你的表  
  for   insert,delete,update  
  if   exists(select   *   from   inserted)  
      if   exists(select   *   from   deleted)  
            .......                   --记录操作为修改的处理语句  
      else  
      ..........                   --记录操作为新增的处理语句  
  else  
      .........                     --记录操作为删除的处理语句  
   
   
  方法2.分开写  
  create   trigger   aa   on   你的表  
  for   insert  
  as    
  ........                 --记录操作为新增的处理语句  
   
  create   trigger   aa   on   你的表  
  for   update  
  as    
  ........                 --记录操作为修改的处理语句  
   
  create   trigger   aa   on   你的表  
  for   delete  
  as    
  ........                 --记录操作为删除的处理语句  


deleted和inserted是系统自动生成的两个临时表  
   
  deleted存删除操作前的记录  
   
  inserted存插入的数据记录   
   
posted @ 2007-06-14 18:10  panzhilei  阅读(225)  评论(0编辑  收藏  举报