觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是透過事件進行觸發而被執行的,而儲存過程可以透過儲存過程名字而被直接呼叫。當對某一表進行諸如UPDATE、 INSERT、 DELETE 這些操作時,SQL Server 就會自動執行觸發器所定義的SQL 語句,從而確保對資料的處理必須符合由這些SQL 語句所定義的規則。 觸發器的主要作用就是其能夠實現由主鍵和外來鍵所不能保證的複雜的參照完整性和資料的一致性。除此之外,觸發器還有其它許多不同的功能: (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 觸發器。
觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是透過事件進行觸發而被執行的,而儲存過程可以透過儲存過程名字而被直接呼叫。當對某一表進行諸如UPDATE、 INSERT、 DELETE 這些操作時,SQL Server 就會自動執行觸發器所定義的SQL 語句,從而確保對資料的處理必須符合由這些SQL 語句所定義的規則。 觸發器的主要作用就是其能夠實現由主鍵和外來鍵所不能保證的複雜的參照完整性和資料的一致性。除此之外,觸發器還有其它許多不同的功能: (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 觸發器。