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個商品。

   個人感覺,用觸發器其實真沒多大必要,像這種邏輯操作,我一個存儲過程就搞定了,感覺真實沒必要用觸發器。再說用觸發器,在后期維護的時候很容易被遺忘,尤其是前一個人交接給后一個人的工作,用觸發器操作數據庫,很難找。我深有體會,真他媽太苦逼了!

   

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM