範例:使用事件資料高度值以避免重複的通知

下列範例顯示如何利用事件紀事輯資料表,根據指定期間最高的事件資料值來防止重複的通知。在這個範例中,當所選股票超出預先定義的臨界值時,股票通知應用程式會向您發出通知。

案例

應用程式會每隔 20 分鐘從 Web 服務取得新的股票事件資料。下表顯示早上的資料。

時間 股票代號 股價 ($USD)

09:00 GMT

AWKS

69.98

09:20 GMT

AWKS

70.35

09:40 GMT

AWKS

70.87

10:00 GMT

AWKS

71.55

10:20 GMT

AWKS

72.00

您自己的事件驅動訂閱是針對 AWKS 股票的值到達 $71.00 (美金) 或以上的通知。因此,您會收到以 10:00 GMT 資料為基礎的通知。在處理事件批次且產生通知之後,定義給這個應用程式的事件紀事輯規則,會在事件紀事輯資料表中輸入和更新當天的高值 (當前是 $71.55)。

訂閱規則

10:20 GMT 事件資料到達,準備接受處理。定義給訂閱規則的通知產生動作會利用事件紀事輯資料表來防止重複的通知。它的方式是在過了觸發價格之後,除非到達新的高值,否則,便排除重複的通知:

-- Generate notifications 
SELECT dbo.StockNotificationNotify(S.SubscriberId,
    S.SubscriberDeviceName, S.SubscriberLocale,
    E.StockSymbol, E.StockPrice)
FROM dbo.StockSubscriptions S 
    JOIN dbo.StockEvents E
        ON S.StockSymbol = E.StockSymbol
    JOIN dbo.StockEventChron C
        ON S.StockSymbol = C.StockSymbol
WHERE S.StockTriggerPrice <= E.StockPrice
    AND S.StockTriggerPrice > C.StockHighPrice

-- Insert new events into event chronicle
INSERT dbo.StockEventChron(StockSymbol, StockHighPrice)
SELECT E.StockSymbol, E.StockPrice
FROM dbo.StockEvents E
WHERE E.StockSymbol
    NOT IN (SELECT StockSymbol FROM dbo.StockEventChron)

-- Update existing events in event chronicle
UPDATE dbo.StockEventChron
SET C.StockHighPrice = E.StockPrice
FROM dbo.StockEvents E JOIN dbo.StockEventChron C
ON E.StockSymbol = C.StockSymbol
WHERE E.StockPrice > C.StockHighPrice
ms166492.note(zh-tw,SQL.90).gif重要事項:
如果您在 XML 檔中定義應用程式,您必須將保留的 XML 字元 (如 '>') 取代成它們的實體參考。如需詳細資訊,請參閱<XML Reserved Characters>。

結果

觸發價格 $71.55 或以下的任何訂閱已收到一項通知,未收到另一項通知。觸發價格大於預存高價 $71.55 但小於或等於新高價 $72.00 的任何訂閱收到一項通知。產生通知之後,事件紀事輯規則便重新更新含有最新資料的事件紀事輯資料表。

請參閱

概念

定義事件類別的紀事輯
定義事件紀事輯資料表
定義訂閱規則
範例:為排程訂閱使用事件紀事輯
範例:比較事件資料以避免重複的通知

說明及資訊

取得 SQL Server 2005 協助