SQL Server -减少代码触发的负担

  1. 触发器是一张表的增删改操作,引起或触发对还有一张表的增删改操作,所以触发器便有3种类型。各自是deleted触发器。Update触发器,insert触发器
  2. 触发器又依据替换原来的增删改操作,还是在原来的增删改完毕之后进行增删改操作。分为Instead of触发器和For或者After触发器(forafter属于一种触发器)
  3. 触发器的使用涉及到两张很重要的表用来保存已经改变或者已经在第一章被操作的表上不存在的记录。各自是虚拟表Inserted和虚拟表Deleted

 

         

虚拟表Inserted

 虚拟表Deleted

在表记录新增时

存放新增的记录 

不存储记录

改动时

存放用来更新的新记录

存放更新前的记录

删除时

不存储记录

存放被删除的记录

 

  1. 以下举一个在机房收费系统重构个人版中用到的易于理解的关于触发器的小样例
    1. 在我们删除T_OnWork_info表中的正在上机工作记录时,同一时候向T_Work_info表中写入工作记录,还同一时候将T_Admin_info表中的IsOn字段改为False
      CREATE TRIGGER trigger_delOnWork
       
      ON T_OnWork_info
       
      FOR DELETE
       
      AS
       
      DECLARE @name varchar(10)
      DECLARE @loginDate varchar(10)
      DECLARE @loginTime varchar(10)
      DECLARE @logoutDate varchar(10)
      DECLARE @logoutTime varchar(10)
      DECLARE @comName varchar(10)
       
      SELECT @name =(SELECT NAME FROM deleted )
      SELECT @loginDate =(SELECT loginDate  FROM deleted )-----deleted表用于存储T_OnWork表中已经删除的记录
      SELECT @loginTime =(sELECT loginTime  FROM deleted )
      SELECT @comName =(SELECT comName  FROM deleted )
      SET @logoutDate=convert(varchar(10),getdate(),101)
      SET @logoutTime =convert(varchar(10),getdate(),108)
       
      if (SELECT COUNT(*) FROM deleted  )=1
       
      BEGIN
       
      INSERT INTO T_Work_info(Name,loginDate,loginTime,logoutDate,logoutTime,comName) VALUES(@name,@loginDate ,@loginTime ,@logoutDate,@logoutTime,@comName )
       
      UPDATE T_Admin_info SET IsOn='False' WHERE Name=(SELECT Name FROM deleted )
       
      ROLLBACK TRAN     --事务回滚
       
      END
      怎么样,触发器非常easy吧,大家能够尝试着用用,触发器+事务的回滚机制。非常容易地做到了为代码减负

版权声明:本文博主原创文章。博客,未经同意不得转载。

posted @ 2015-10-28 09:53  phlsheji  阅读(211)  评论(0编辑  收藏  举报