示例:使用较大的事件数据值来避免重复通知

以下示例演示了如何使用事件历史记录表,根据指定时间段中事件数据的最高值来避免重复通知。在本例中,一个股票通知应用程序将在选定的股票超过预定义的阈值向您发送通知。

应用场景

该应用程序每隔 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-cn,SQL.90).gif重要提示:
如果是在 XML 文件中定义应用程序,则必须使用 XML 字符的实体引用来代替保留的 XML 字符,如“>”。有关详细信息,请参阅 XML Reserved Characters

结果

触发价格为 $71.55 或更低的订阅已经收到一条通知,不会再接收其他通知。触发价格大于存储的高价格 $71.55,但小于或等于新的高价格 $72.00 的任何订阅将收到一条通知。生成了通知后,事件历史记录规则将使用最新数据再次更新事件历史记录表。

请参阅

概念

为事件类定义历史记录
定义事件历史记录表
定义订阅规则
示例:使用预定的订阅的事件历史记录
示例:比较事件数据以避免重复通知

帮助和信息

获取 SQL Server 2005 帮助