SQL server 之 觸發器

                           今天對觸發器研究了一下,之前的學習感覺挺朦朧的,今天鼓搗了一天,算是有了一點點了解,把學習的體會記錄了下來。




常見的觸發器
     觸發器的作用:  自動化操作,減少了手動操作以及出錯的機率(現實工作中用的比較少,因爲想讓他執行起來效率高很難)
  一、DML觸發器
Insert、delete、update(不支持select)
after觸發器(for)、instead of觸發器(不支持before觸發器)
二、(*)DDL觸發器
Create table、create database、alter、drop….






語法:
   create trigger trig_觸發器名 on 針對哪個表觸發(表名)
    after (這裏用for也一樣,兩者都表示after觸發器) | intead of   delete、update、insert
as
begin
   T-SQL語句
end

1、首先了解兩張表   inserted,deletede
  這兩張表示當執行、插入、修改更新等操作時系統給創建的表,當操作結束之後會自動銷燬,每執行依據t-sql語句就會觸發一次觸發器,不管你執行的語句刪除、修改、插入的是多少條記錄,
  所以,要注意:這兩張表裏存的是你上一次最後執行的記錄
   -->inserted
當執行 insert 語句的時候會生成兩條記錄,一條會插入到你指定的表裏,一條會放到系統創建的 inserted 表中
當執行update  語句的時候會先把原來的記錄刪除放到系統創建的deleted表中,然後生成兩條記錄,一條放到你指定的表裏,一條放到insert表裏

   --》deleteed
    當執行delete語句時,會把這條記錄放到deleted表裏  


 2、after 觸發器
    在語句執行操作之後觸發
在語句執行完畢之後觸發
按語句觸發,而不是所影響的行數,無論所影響爲多少行,只觸發一次。
只能建立在常規表上,不能建立在視圖和臨時表上。(*)
可以遞歸觸發,最高可達32級。
update(列),在update語句觸發時,判斷某列是否被更新,返回布爾值。


3、intead of觸發器
  用來替換原來的操作
  用來替換原本的操作
不會遞歸觸發
可以在約束被檢查之前觸發
可以建在表和視圖上(*)
 

  select * from TClass 
--複製一張新表,用來備份
select top 0 * into NewTClass from TClass 


select * from NewTClass 
--創建一個觸發器,當刪除TClass表中的數據時自動觸發,把刪除的數據備份到一張新標中
create trigger trig_NewTClass_delete on TClass
after delete  --執行刪除語句之後觸發
as
begin
    --一次插入多條記錄,如果用values只可以查入一條,要是用戶一次刪除多條,那麼values就不能把多條記錄插入了
   insert into NewTClass select cName,cDescription from deleted
end


delete from TClass where classId =14
--刪除觸發器
drop trigger trig_NewTClass_delete
--instead觸發器,當執行刪除操作時,把刪除操作替換成 打印   print '執行刪除操作了'
create trigger trig_NewTClass_delete on TClass
instead of delete
as
begin
    print '執行刪除操作了'
end

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章