zoukankan      html  css  js  c++  java
  • Sqlserver 触发器

       说到触发器,个人感觉也不是多太常用,那什么时候要用到触发器呢?触发器又有哪些有优点呢?

       个人理解触发器的优点无非有3种(个人理解,仅供参考):

       1,自动性:也就是说我在A表上建了一个触发器,如果我在A表中插入,修改,或者删除一条数据,那么触发器就会自动触发了。

       2,层叠修改:比如我在A表插入一条数据,那么我可以操作与A表相关联的其他表,可以删除或更新包含外键关系中所涉及的数据的所有行。

       3,强制限制:也就是可以做判断,if  什么  else 什么。

     触发器到底有几种呢?我记得刚开始学如何使用触发器的时候,百度上写了一大堆,其实归结起来也就三种:

         UPDATE:更新

         DELETE:删除

         INSERT:插入

      上面介绍了触发器的基本用途和信息,具体如何运用,我就举一个简单的小例子吧! 

         我们就以仓库的出库和入库具体吧!首先我们要建两个表一个是仓库出入库记录表(记录每一笔出货,入货记录):StockDetail,一个是库存总表(记录仓库目前各种货物的总数):StockSum

          

         StockDetail 表中:StockDetailID:主键   StockCount:出入货物数量   InOrOut:出入库标志 0代表出库,1代表入库 GoodsType: 商品种类。

          StockSum 表中:StockSumID:主键    Sum:每种商品的中数量   GoodsType:商品种类。

    下面我们就模拟一个入库操作,就以StockDetail 表中第三条数据为例。(第三条数据表示想仓库中的商品种类2入库40)

         首先我们要建一个触发器,如何建看下图:

     

         右击,选择新建触发器就可以了。

    下面是触发器sql代码:

    USE [MyData]
    GO
    /****** Script Date: 2020/1/5 星期日 16:44:01 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    create TRIGGER [dbo].[Tr_StockDetail] 
       ON [dbo].[StockDetail] 
       AFTER  INSERT
    AS 
    DECLARE @StockCount INT,
            @InOrOut INT,
            @GoodsType intBEGIN
        
        SET NOCOUNT ON;
        SELECT @StockCount=StockCount,@InOrOut=InOrOut,@GoodsType=GoodsType  FROM INSERTED
         if @InOrOut=1
            update StockSum set Sum=SUM+@StockCount where GoodsType=@GoodsType
         else 
           update StockSum set Sum=SUM-@StockCount where GoodsType=@GoodsType
    
    END

     那接下我们按要求执行一次入库操作:

    insert into [MyData].[dbo].[StockDetail]
      (  
          [StockCount]
          ,[InOrOut]
          ,[GoodsType]
      )values
      (
      40,
      1,
      2
      )

    没有执行入库操作前两个表的情况:

    执行操作后两个表的情况:

     

    对比一下是不是变了,入库记录多一条的同时,库存商品类型2加个30个商品。

       个人感觉,用触发器其实真没多大必要,像这种逻辑操作,我一个存储过程就搞定了,感觉真实没必要用触发器。再说用触发器,在后期维护的时候很容易被遗忘,尤其是前一个人交接给后一个人的工作,用触发器操作数据库,很难找。我深有体会,真他妈太苦逼了!

       

        

  • 相关阅读:
    互联网协议入门
    【HTTP】图解HTTPS
    《计算机本科生理想的学习计划》
    VC++ TinyXML
    TinyXML 在vs2010 VC++使用
    Hadoop2.4.1入门实例:MaxTemperature
    xcode6
    Android利用广播监听设备网络连接(断网)的变化情况
    编程算法
    Google的Guava之IO升华
  • 原文地址:https://www.cnblogs.com/zpy1993-09/p/12152971.html
Copyright © 2011-2022 走看看