触发器实例

 
 触发器简介: 
 

       触发器(trigger)是个特殊的存储过程,与存储过程不同的是,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,即当某个事件发生时,触发器自动的隐式运行,触发器不能像存储过程一样,接收参数。

       触发器执行环境:

       第一:触发器正确执行所必需的信息,这些信息由触发器本身的细节和触发器所定义的目标表。

       第二:还包括一个或两个测试表,称之为INSERTED表和DELETED表。测试表示虚表,用于保存目标更新、插入或删除的数据信息,用户不能直接修改测试表中的数据,但能通过SELECT语句,来检测INSERT,UPDATE或DELETE的结果。

各种类型触发器用到的测试表:

        inserted:

                    触发器实例_第1张图片

      存放INSERT和UPDATE语句中的副本,在INSERT或UPDATE语句的执行中,这些新行同时被加到inserted表和tigger表中,inserted表中的行是trigger表中新行的副本。

      deleted:

                        

             存放DELETE和UPDATE语句中相关行的副本,在DELETE或UPDATE语句的执行中,这些相关行从trigger表中移到了deleted表中,一般情况下,这两张表无共同行。

       update:

                  

           一个UPDATE效果等效于一个DELETE再一个INSERT。首先旧行被复制到deleted表中,然后新行被复制到trigger表和inserted表中。

触发器创建:

INSERT触发器示例:

  1. create trigger T_addStudent  
  2. on StudentInfo  
  3. for insert  
  4. as   
  5.   update ClassInfo set totalNum=totalNum+1  
  6.   where ClassNo = (select StuClass from inserted) 
UPDATE触发器示例

  1. create trigger t_Update  
  2. on TeacherInfo   
  3. for update   
  4. as   
  5. if (update(TeacherName)or update(sex))  
  6. begin   
  7.     print'事物不能被处理,基本数据不能修改!'  
  8.     rollback transaction  
  9. end   
  10. else   
  11.     print'数据修改成功!
DELETE触发器示例

create   trigger  T_Delete   on   dbo.studentinfo  
     for   delete
     as
       update   dbo.studentinfo
       set   User_ID=(select   count(*)
                      from   dbo.studentinfo   t1
                      where   t1.User_ID<TRIGGER_.User_ID)+1
       from   dbo.studentinfo




你可能感兴趣的:(触发器实例)