觸發器是一種特殊類型的預存程序,它不同於普通的預存程序。觸發器主要是通過事件進行觸發而被執行的,而預存程序可以通過預存程序名稱而被直接調用。當往某一個表格中插入記錄、修改記錄或者刪除記錄時,SQL SERVER就會自動執行觸發器所定義的SQL語句,以確保資料的完整性。 很多時候我們有這樣一種需求,某一分類資訊是屬於另一個大的分類,當需要刪除大的分類時,它下面小的分類實際也應該一起刪除的,而且表之間設定了主鍵和外鍵,例如有三個表示:新聞分類表、新聞表、評論表。 它們分別為一對多的關係,如果你刪除某一個新聞分類,這個分類裡的新聞以及每條新聞的評論應該都刪除,這三個表之間如果建立了外鍵,再刪分類表或新聞表時就會出錯,而用觸發器可以很好的解決。 因此,在刪除新聞分類時,要先刪除它下面的新聞,即新聞表中屬於該分類下的記錄。 建立觸發器代碼如下: 在觸發器中需要注意代碼中紅色框和綠色框框中內容,紅色框中可以是Instead of 或after ,分別表示UPDATE、 INSERT 、DELETE執行之前或之後觸發。 AFTER:表示只有在執行了指定的操作INSERT、DELETE、UPDATE之後觸發器才被啟用,執行觸發器中的SQL語句。
INSTEAD OF:當為表或視圖定義了針對某一操作INSERT、DELETE、UPDATE的INSTEAD OF類型觸發器,且執行了相應的操作時,儘管觸發器被觸發,但相應的操作並不被執行,而啟動並執行僅是觸發器SQL語句本身。 這句話表明如果是INSTEAD OF類型觸發器,那個執行的SQL語句本身不再執行,而是只執行觸發器中內容。 如果是三個表之間串聯刪除和兩個表之間刪除類似,不同的是再刪除第三表中記錄時,所有的評論不會只屬於一個新聞類,可以用“In”關鍵字,刪除。如下: 可能你對觸發器語句中的deleted不理解,這涉及到觸發器工作原理。
每個觸發器有兩個特殊的表:插入表(inserted)和刪除表(deleted)。這兩個表是邏輯表,並且這兩個表是由系統管理的,儲存在記憶體中,不是儲存在資料庫中,因此不允許使用者直接對其修改。這兩個表的結構總是與被該觸發器作用的表有相同的表結構。這兩個表是動態駐留在記憶體中的,當觸發器工作完成,這兩個表也被刪除。這兩個表主要儲存因使用者操作而被影響到的原資料值或新資料值;另外這兩個表是唯讀,即使用者不能向這兩個表寫入內容,但可以參考資料表中的資料。 觸發器和事件觸發一樣,如單擊事件,它是事件觸發事件,讓多個有聯絡的業務、操作關聯起來,需要根據需要靈活使用。