SQL之觸發器

一、觸發器是一種特殊的存儲過程,它不能被顯式地調用,而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地激活。

二、SQL Server爲每個觸發器都創建了兩個專用表:Inserted表和Deleted表。這兩個表由系統來維護,它們存在於內存中而不是在數據庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。觸發器執行 完成後,與該觸發器相關的這兩個表也被刪除

  1、Deleted表存放由於執行Delete或Update語句而要從表中刪除的所有行。

  2、Inserted表存放由於執行Insert或Update語句而要向表中插入的所有行。

三、Instead of 和After觸發器

       1、Instead of觸發器用於替代引起觸發器執行的T-SQL語句。除表之外,Instead of 觸發器也可以用於視圖,用來擴展視圖可以支持的更新操作。

  2、After觸發器在一個Insert,Update或Deleted語句之後執行,進行約束檢查等動作都在After觸發器被激活之前發生。After觸發器只能用於表。

    3、一個表或視圖的每一個修改動作(insert,update和delete)都可以有一個instead of 觸發器,一個表的每個修改動作都可以有多個After觸發器。

四、insert觸發器、update觸發器、delete觸發器

       SELECT*FROM [a].[dbo].[test]

        

       1、insert觸發器

            create trigger test_insert
      on test
        after insert
            as
           if(exists (select * from inserted where inserted.c<>'100'))
           begin
                    print 'error:數據不合法,不能插入'
                    rollback transaction
           end

          insert into test(ida,b,c,d,e)values('007','f','10','d','e')

          

          insert into test(ida,b,c,d,e)values('007','f','100','d','e')

 插入數據成功!

       2、update觸發器

             create trigger test_update
       on test
             after update
             as
       if(exists (select * from inserted where inserted.c<>'100'))
       begin
       print 'error:數據不合法,不能更新'
       rollback transaction
       end

       3、delete觸發器

            create trigger test_delete     //alter trigger test_delete
      on test
      after delete
      as
      if(exists (select * from deleted where deleted.c<>'100'))
      begin
      print 'error:數據不合法,不能更新'
      rollback transaction
      end


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章