觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的壹致性。除此之外,觸發器還有其它許多不同的功能:
(1)強化約束(Enforce restriction)
觸發器能夠實現比CHECK 語句更為復雜的約束。
(2)跟蹤變化(Auditing changes)
觸發器可以偵測數據庫內的操作,從而不允許數據庫中未經許可的指定更新和變化。
(3)級聯運行(Cascaded operation)。
觸發器可以偵測數據庫內的操作,並自動地級聯影響整個數據庫的各項內容。例如,某個表上的觸發器中包含有對另外壹個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。
(4)存儲過程的調用(Stored procedure invocation)。
為了響應數據庫更新觸,發器可以調用壹個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS( 數據庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定制記錄等壹些方面的問題。例如,觸發器能夠找出某壹表在數據修改前後狀態發生的差異,並根據這種差異執行壹定的處理。此外壹個表的同壹類型(INSERT、 UPDATE、 DELETE)的多個觸發器能夠對同壹種數據操作采取多種不同的處理。
總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這壹處理上,因為這些表既不在內存中也不在數據庫設備上,而刪除表和插入表總是位於內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。
觸發器的種類
SQL Server 2000 支持兩種類型的觸發器:AFTER 觸發器和INSTEAD OF 觸發器。其中AFTER 觸發器即為SQL Server 2000 版本以前所介紹的觸發器。該類型觸發器要求只有執行某壹操作(INSERT UPDATE DELETE) 之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同壹操作定義多個觸發器。對於AFTER 觸發器,可以定義哪壹個觸發器被最先觸發,哪壹個被最後觸發,通常使用系統過程sp_settriggerorder 來完成此任務。
INSTEAD OF 觸發器表示並不執行其所定義的操作(INSERT、 UPDATE、 DELETE),而僅是執行觸發器本身。既可在表上定義INSTEAD OF 觸發器,也可以在視圖上定義INSTEAD OF 觸發器,但對同壹操作只能定義壹個INSTEAD OF觸發器。