Trigger為觸發程序,也就是在對資料庫進行動做時,因為insert delete等動作觸發此程序,根據msdn的解釋如下:
建立 DML、DDL 或登入觸發程序。觸發程序是一種在資料庫伺服器發生事件時,會自動執行的特殊預存程序。當使用者試圖透過資料操作語言 (DML) 事件來修改資料時,便會執行 DML 觸發程序。DML 事件包括資料表或檢視的 INSERT、UPDATE 或 DELETE 陳述式。當引發任何有效的事件時,都會引發這些觸發程序,不論是否有任何資料表資料列受到影響。
DDL 觸發程序則是為了回應各種資料定義語言 (DDL) 事件而執行的。這些事件主要是對應到 Transact-SQL CREATE、ALTER 和 DROP 陳述式,以及執行類似 DDL 作業的特定系統預存程序。登入觸發程序會引發來回應使用者工作階段建立時所引發的 LOGON 事件。您可以直接從 Transact-SQL 陳述式建立觸發程序,也可以利用 Microsoft.NET Framework Common Language Runtime (CLR) 所建立之組件的方法來建立觸發程序,再將其上傳到 SQL Server 執行個體。SQL Server 允許針對任何特定陳述式建立多個觸發程序。
這也是一種在程式設計時的必要解決方案,假設必須要在對資料新增時,做一些特定的處理,這實就必須以trigger來完成相關的動作,舉例來說
當 TABLE1 UPDATE AMOUNT欄位時 當值大於600時,藉由Trigger 觸發 將該筆資料 寫入Table4
這時就可建立一個trigger
CREATE TRIGGER TRIGGER_TEST
ON TABLE1
AFTER UPDATE
AS
IF( SELECT max(AMOUNT) FROM inserted) > 600
BEGIN
INSERT INTO TABLE4( NAME4 , AMOUNT4 ) SELECT NAME , AMOUNT FROM inserted
END
就可以自動在符合條件的情形下,完成記錄
另外要說明的是:inserted deleted資料表,這個在實做trigger時,是必須瞭解的基礎,說明如下:
deleted 資料表會儲存因 DELETE 及 UPDATE 陳述式而受影響的資料列副本。在 DELETE 或 UPDATE 陳述式執行時,從觸發程序資料表中被刪除的資料列會傳送到 deleted 資料表,在正常的情形下,deleted 資料表與觸發程序資料表並不會有共同的資料列。
inserted 資料表會儲存被 INSERT 及 UPDATE 陳述式影響的資料列副本。在插入或更新交易時,新的資料列會同時被加至觸發程序資料表與 inserted 資料表。inserted 資料表中的資料列即為觸發程序資料表中新加入資料列的副本。
更新交易就像是插入後再刪除的動作;首先,舊資料列被複製到 deleted 資料表,接著將新資料列再複製到觸發程序資料表以及 inserted 資料表。
當然也可以在程式中去控制這些動作,不過效能一定就差許多,因此在必要的情況下,SQL 的Trigger是無法取代的解決方式,既然有無可取代的特定功用,也就是必須要瞭解的.