Share via


瞭解事件通知與觸發程序

下表比較觸發程序和事件通知的異同。

觸發程序

事件通知

DML 觸發程序回應資料管理語言 (DML) 事件。DDL 觸發程序回應資料定義語言 (DDL) 事件。

事件通知可回應 DDL 事件和 SQL 追蹤事件的子集。

觸發程序可以執行 Transact-SQL 或 Common Language Runtime (CLR) Managed 程式碼。

事件通知不會執行程式碼。相反的,它們可以傳送 xml 訊息給 Service Broker 服務。

觸發程序會在引發它們的交易範圍內同步處理觸發程序。

事件通知可以非同步處理,而且不會在引發它們的交易範圍中執行。

觸發程序的取用者與引發它的事件緊密繫結在一起。

事件通知的取用者與引發它的事件分離。

觸發程序必須在本機伺服器上處理。

事件通知可以在遠端伺服器上處理。

觸發程序是可以回復的。

事件通知是無法回復的。

DML 觸發程序名稱是以結構描述限定範圍。DML 觸發程序名稱是以資料庫或伺服器限定範圍。

事件通知名稱是以伺服器或資料庫限定範圍。在 QUEUE_ACTIVATION 事件上的事件通知是限定成特定的佇列。

DML 觸發程序是由套用觸發程序的資料表之相同擁有者所擁有。

佇列上的事件通知擁有者,有可能與套用事件通知的物件具有不同的擁有者。

觸發程序支援 EXECUTE AS 子句。

事件通知不支援 EXECUTE AS 子句。

DDL 觸發程序的事件資訊可以使用 EVENTDATA 函數來擷取,該函數會傳回 xml 資料類型。

事件通知會傳送 xml 事件資訊給 Service Broker 服務。資訊將格式化成與 EVENTDATA 函數相同的結構描述。

與觸發程序相關的中繼資料可在 sys.triggerssys.server_triggers 目錄檢視中找到。

與事件通知相關的中繼資料可在 sys.event_notificationssys.server_event_notifications 目錄檢視中找到。

請參閱

概念