Beispiel: Verwenden von Höchstwerten für Ereignisdaten zum Vermeiden doppelter Benachrichtigungen

Im folgenden Beispiel wird gezeigt, wie eine Ereignisverlaufstabelle verwendet wird, um doppelte Benachrichtigungen auf Grundlage von Höchstwerten für Ereignisdaten in einem angegebenen Zeitraum zu verhindern. In diesem Beispiel stellt eine Benachrichtigungsanwendung für Aktien Benachrichtigungen für Sie bereit, wenn die ausgewählten Aktien die vordefinierten Schwellenwert überschreiten.

Szenario

Von einem Webdienst erhält die Anwendung alle 20 Minuten neue Ereignisdaten zu Aktien. In der folgenden Tabelle sind die Daten für den Morgen dargestellt.

Time in Stock symbol Stock price ($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

Wenn die AWKS-Aktie den Wert $71.00 (USD) oder höher erreicht, wird von Ihrem ereignisgesteuerten Abonnement eine Benachrichtigung ausgegeben. Daher erhalten Sie eine Benachrichtigung, die auf den Daten unter 10:00 GMT basiert. Nach der Verarbeitung des Ereignisbatches und der Benachrichtigungsgenerierung wird der Höchstwert des Tages ($71.55) eingegeben oder in der Verlaufstabelle aktualisiert, indem eine für diese Anwendung definierte Ereignisverlaufsregel verwendet wird.

Abonnementregel

Die Ereignisdaten unter 10:20 GMT werden zur Verarbeitung empfangen. Zur Vermeidung doppelter Benachrichtigungen verwendet die für die Abonnementregel definierte Benachrichtigungsgenerierungsaktion die Ereignisverlaufstabelle. Dazu werden doppelte Benachrichtigungen ausgeschlossen, sobald der auslösende Preis übergeben wurde, es sei denn, ein neuer Höchstwert wird erreicht:

-- 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(de-de,SQL.90).gifWichtig:
Wenn Sie eine Anwendung in einer XML-Datei definieren, müssen Sie z. B reservierte XML-Zeichen wie '>' durch ihre Entitätsverweise ersetzen. Weitere Informationen finden Sie unter XML Reserved Characters.

Ergebnisse

Ein beliebiges Abonnement mit dem auslösenden Preis ($71.55) oder niedriger hat bereits eine Benachrichtigung erhalten und empfängt keine weitere Benachrichtigung. Alle Abonnements, die einen auslösenden Preis besitzen, der größer als der gespeicherte Höchstpreis ($71.55) und kleiner oder gleich dem neuen Höchstpreis ($72.00) ist, empfangen eine Benachrichtigung. Nachdem die Benachrichtigungen generiert wurden, wird die Ereignisverlaufstabelle erneut von der Ereignisverlaufsregel mit den neusten Daten aktualisiert.

Siehe auch

Konzepte

Definieren von Verläufen für eine Ereignisklasse
Definieren von Ereignisverlaufstabellen
Definieren von Abonnementregeln
Beispiel: Verwenden eines Ereignisverlaufs für geplante Abonnements
Beispiel: Vergleichen von Ereignisdaten zum Vermeiden doppelter Benachrichtigungen

Hilfe und Informationen

Informationsquellen für SQL Server 2005