瞭解事件通知與觸發程序
下表比較觸發程序和事件通知的異同。
觸發程序 | 事件通知 |
---|---|
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.triggers 與 sys.server_triggers 目錄檢視中找到。 |
與事件通知相關的中繼資料可在 sys.event_notifications 與 sys.server_event_notifications 目錄檢視中找到。 |