了解事件通知

事件通知會將這些事件的資訊傳送給 Service Broker 服務,以回應各種 Transact-SQL 資料定義語言 (DDL) 陳述式和 SQL 追蹤事件。

事件通知可用來執行下列工作:

  • 記錄和檢閱發生在資料庫的變更或活動。

  • 執行動作以非同步而不是同步的方式來回應事件。

事件通知可提供程式設計替代方案給 DDL 觸發程序和 SQL 追蹤。

事件通知會以非同步方式在交易範圍以外執行。因此,與 DDL 觸發程序不同的是,事件通知可在資料庫應用程式中使用,以便回應未使用立即交易所定義之資源的事件。如需詳細資訊,請參閱<瞭解事件通知與觸發程序>。

與 SQL 追蹤不同的是,事件通知可用來在 SQL Server 執行個體內執行動作,以回應 SQL 追蹤事件。如需詳細資訊,請參閱<瞭解事件通知與 SQL 追蹤>。

建立事件通知時,會在 SQL Server 執行個體與您所指定的目標服務之間開啟一或多個 Service Broker 交談。交談通常會維持開啟狀態,只要事件通知是以伺服器執行個體上的物件存在即可。在某些錯誤的例子中,可以在卸除事件通知之間先關閉交談。這些交談永遠不會在事件通知之間共用。每個事件通知都有自己獨佔的交談。明確地結束交談可防止目標服務再收到訊息,而且在下次事件通知引發之前都不會再重新開啟交談。

事件資訊是以 xml 類型的變數傳遞至 Service Broker,它提供事件發生時的資訊、受影響之資料庫物件的資訊、相關的 Transact-SQL 批次陳述式以及其他資訊。如需事件通知所產生之 XML 結構描述的詳細資訊,請參閱<EVENTDATA (Transact-SQL)>。

與 SQL Server 一起執行的應用程式可使用事件資料來追蹤進度和下決定。例如,下列事件通知會在每次於 AdventureWorks2008R2 範例資料庫中發出 ALTER TABLE 陳述式時,將通知傳送給特定服務。

USE AdventureWorks2008R2;
GO
CREATE EVENT NOTIFICATION NotifyALTER_T1
ON DATABASE
FOR ALTER_TABLE
TO SERVICE '//Adventure-Works.com/ArchiveService' ,
    '8140a771-3c4b-4479-8ac0-81008ab17984';

SQL Server Database Engine 範例提供了可針對 AdventureWorks2008R2 範例資料庫執行的事件通知範例指令碼 (EventNotificationSample.sql)。