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

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

  • 相关阅读:
    AFNetworking 3.0迁移指南
    富文本常用封装(NSAttributedString浅析)
    如何在 Objective-C 的环境下实现 defer
    iOS之深入了解控制器View的加载
    10+年程序员总结的20+条经验教训
    Foundation: NSNotificationCenter
    做一款仿映客的直播App?看我就够了
    AFNetworking源码分析
    WWDC2016 Session笔记 – Xcode 8 Auto Layout新特性
    iOS页面间传值的一些方式总结
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4916423.html
Copyright © 2011-2022 走看看