zoukankan      html  css  js  c++  java
  • 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吧,大家能够尝试着用用,触发器+事务的回滚机制。非常容易地做到了为代码减负

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

  • 相关阅读:
    SQLyog使用中的点滴总结
    Maven的GroupID和ArtifactID的含义
    Android View 深度分析requestLayout、invalidate与postInvalidate
    15 个 Android 通用流行框架大全
    Android Studio中获取查看签名SHA1证书指纹数据或MD5的方法
    android:descendantFocusability用法简析
    Android应用层View绘制流程与源码分析
    android.graphic.Path
    Android Scroller简单用法
    Android 2D Graphics学习 Region和Canvas裁剪
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4916423.html
Copyright © 2011-2022 走看看