共用方式為


定義訂閱類別的紀事輯

這個訂閱紀事輯資料表儲存訂閱資料供應用程式使用。例如,您可以使用訂閱紀事輯資料表來儲存有關傳遞給訂閱者的最後通知的資訊,並只以中間階段送入的資料作為基礎來產生下一個通知。

訂閱紀事輯的一般用途

訂閱紀事輯通常儲存關於先前的通知的資料。在產生通知時,應用程式可使用這個資料來判斷訂閱者上次收到通知的時間,或訂閱者是否收到類似的通知。

關於何時使用訂閱紀事輯資料表,這個應用程式是一個理想範例:您想要限制每一個訂閱者一個期間一個通知。您可以定義訂閱紀事輯,它包含每一個訂閱者一個資料列,而且有時間戳記指出產生前次通知的時間。

產生通知時,您可以包含一個條件,指定唯有當訂閱者在過去 24 時內未收到通知時才產生通知。如果訂閱者最近未收到通知,您可以將這個通知加入至通知資料表,並更新訂閱紀事輯中的時間戳記。

訂閱紀事輯資料表

訂閱紀事輯的實作方式是資料表。當您定義訂閱類別時,可使用 Transact-SQL CREATE TABLE 陳述式定義零個、一個或多個紀事輯資料表。這個陳述式必須包含資料表名稱、欄位名稱和欄位資料類型。這個陳述式也可包含條件約束的引數和任何其他選擇性的 CREATE TABLE 參數。您也可以包含 CREATE INDEX 陳述式,在事件紀事輯資料表上建立索引。如需詳細資訊,請參閱<CREATE TABLE (Transact-SQL)>。

當您更新應用程式時,Notification Services 不會自動重新命名訂閱紀事輯資料表,但它會對其他訂閱資料表這麼做。如果已有相同名稱的資料表存在,則建立紀事輯資料表的陳述式會失敗。請使用 INFORMATION_SCHEMA.TABLES 檢視來確認該資料表是否存在,然後略過資料表的建立,或卸除及重新建立資料表。

下列範例顯示如何刪除具有 dboSubscriberHistory 名稱的現有資料表,然後為有兩個資料行 (SubscriberIdNotificationTime) 的 StockSubscriptions 訂閱類別建立紀事輯:

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME = 'SubscriptionHistory'
        AND TABLE_SCHEMA = 'dbo')
    DROP TABLE dbo.SubscriberHistory;
CREATE TABLE dbo.SubscriberHistory
    ( 
    SubscriberId nvarchar(255), 
    LastNotified datetime 
    );
ms172554.note(zh-tw,SQL.90).gif附註:
如果您在 XML 檔中定義應用程式,您必須將保留的 XML 字元 (如 '>') 取代成它們的實體參考。如需詳細資訊,請參閱<XML Reserved Characters>。

定義訂閱紀事輯資料表

如果您要使用 XML 定義應用程式,請在應用程式定義檔案 (ADF) 中定義紀事輯。如果您要以程式設計的方式定義應用程式,請使用 Notification Services Management Objects (NMO) 來定義紀事輯。

更新訂閱紀事輯

您可以定義一或多個查詢來處理訂閱紀事輯資料表資料。這些查詢會插入、更新和刪除紀事輯資料表中的資料,使資料表保持在適當的狀態,供應用程式使用。

您必須在新事件或排程訂閱規則中定義訂閱紀事輯規則,或定義為新訂閱規則的一部份。

ms172554.note(zh-tw,SQL.90).gif附註:
不保證多個事件規則或多個排程規則之間的引發順序。

下列程式碼顯示如何更新股票應用程式的訂閱紀事輯。訂閱紀事輯追蹤何時是最後一次為每一個訂閱者產生通知。

UPDATE dbo.SubscriberHistory
SET LastNotified = GETUTCDATE() 
FROM dbo.StockSub s 
    JOIN dbo.SubscriberHistory h
        ON s.SubscriberId = h.SubscriberId
    JOIN dbo.EventChron ec 
        ON ec.Updated > h.LastNotified;

在更新 SubscriberHistory 訂閱紀事輯之前,這個規則依賴使用事件紀事輯來產生通知。您應該將這個規則加入至產生通知的訂閱規則,而不要將它放在新的訂閱規則中。

如需有關訂閱規則的詳細資訊,請參閱<定義訂閱規則>。

請參閱

概念

定義事件類別的紀事輯

其他資源

定義訂閱類別
UPDATE (Transact-SQL)
SET (Transact-SQL)
IF...ELSE (Transact-SQL)
EXISTS (Transact-SQL)
CREATE TABLE (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助