触发器实例

触发器简介:

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

       触发器执行环境:

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

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

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

        inserted:

                    

      存放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




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值