共用方式為


瞭解 DML 觸發程序

MicrosoftSQL Server 提供兩種主要的機制來強制執行商務規則和資料完整性:條件約束和觸發程序。觸發程序是一種特殊的預存程序,它會在執行語言事件時自動生效。SQL Server 包含三種一般的觸發程序:DML 觸發程序、DDL 觸發程序,以及登入觸發程序。

當伺服器或資料庫中發生資料定義語言 (DDL) 時,就會叫用 DDL 觸發程序。如需詳細說明,請參閱<DDL 觸發程序>。登入觸發程序會引發預存程序來回應 LOGON 事件。當 SQL Server 執行個體建立使用者工作階段時,就會引發這個事件。如需詳細資訊,請參閱<登入觸發程序>。

當資料庫中發生資料操作語言 (DML) 事件時,就會叫用 DML 觸發程序。DML 事件包括了在指定資料表或檢視中修改資料的 INSERT、UPDATE 或 DELETE 陳述式。DML 觸發程序可以查詢其他資料表,並且可以包含複雜的 Transact-SQL 陳述式。觸發程序和引發它的陳述式會被視為單一交易處理,而這樣的交易可以從觸發程序內部回復。如果偵測到伺服器錯誤 (例如,磁碟空間不足),整個交易就會自動回復。

DML 觸發程序有下列幾種用途:

  • 它們可以串聯資料庫中相關資料表的變更,不過,透過串聯的參考完整性條件約束來執行這些變更會更有效率。

  • 它們可以預防惡意或錯誤的 INSERT、UPDATE 和 DELETE 作業,並且強制執行其他比 CHECK 條件約束所定義的限制更複雜的限制。

    與 CHECK 條件約束不同的是,DML 觸發程序可以參考其他資料表中的資料行。例如,觸發程序可以使用其他資料表的 SELECT 來比較插入或更新的資料,以及執行其他動作,如修改資料或顯示使用者自訂錯誤訊息。

  • 它們可以評估資料修改前後的資料表狀態,並依據這些差異採取動作。

  • 資料表中相同類型 (INSERT、UPDATE 或 DELETE) 的多個 DML 觸發程序,允許對相同的修改陳述式執行多種不同的動作。