Definieren von Verläufen für eine Abonnementklasse

In den Abonnementverlaufstabellen werden Abonnementdaten zum Verwenden in einer Anwendung gespeichert. Beispielsweise können Sie eine Abonnementverlaufstabelle verwenden, um Informationen zu der letzten an einen Abonnenten übermittelten Benachrichtigung zu speichern und die nächste Benachrichtigung nur auf Daten basierend generieren, die in der Zwischenzeit angekommen sind.

Häufige Verwendungsweisen für Abonnementverläufe

In Abonnementverläufen werden normalerweise Daten zu vorherigen Benachrichtigungen gespeichert. Beim Generieren von Benachrichtigungen kann eine Anwendung diese Daten verwenden, um zu bestimmen, wann der Abonnent zuletzt eine Benachrichtigung erhalten hat oder ob der Abonnent eine ähnliche Benachrichtigung erhalten hat.

Ein gutes Beispiel für die Verwendung einer Abonnementverlaufstabelle ist eine Anwendung, in der Sie jeden Abonnenten auf eine Benachrichtigung pro Zeitraum beschränken möchten. Sie können einen Abonnementverlauf definieren, der eine Zeile pro Abonnenten enthält und über einen Timestamp verfügt, der anzeigt, wann die letzte Benachrichtigung generiert wurde.

Beim Generieren von Benachrichtigungen können Sie eine Bedingung einschließen, um Benachrichtigungen nur dann zu generieren, wenn der Abonnent in den vergangenen 24 Stunden keine Benachrichtigung erhalten hat. Wenn der Abonnent kürzlich keine Benachrichtigung erhalten hat, fügen Sie die Benachrichtigung der Benachrichtigungstabelle hinzu und aktualisieren den Timestamp im Abonnementverlauf.

Abonnementverlaufstabellen

Abonnementverläufe werden als Tabellen implementiert. Beim Definieren einer Abonnementklasse können Sie mithilfe der Transact-SQL-Anweisung CREATE TABLE keine, eine oder mehrere Verlaufstabellen definieren. Diese Anweisung muss den Tabellennamen, die Feldnamen und die Felddatentypen enthalten. Die Anweisung kann außerdem Argumente für Einschränkungen und andere optionale CREATE TABLE-Parameter enthalten. Sie können auch eine CREATE INDEX-Anweisung verwenden, um einen Index für die Ereignisverlaufstabelle zu erstellen. Weitere Informationen finden Sie unter CREATE TABLE (Transact-SQL).

Notification Services benennt Abonnementverlaufstabellen nicht automatisch um, wenn Sie die Anwendung aktualisieren, wie dies bei anderen Abonnementtabellen geschieht. Anweisungen zum Erstellen einer Verlaufstabelle erzeugen einen Fehler, wenn bereits eine Tabelle mit dem gleichen Namen vorhanden ist. Überprüfen Sie mit der INFORMATION_SCHEMA.TABLES-Sicht, ob die Tabelle vorhanden ist, und lassen Sie dann entweder das Erstellen der Tabelle aus, oder löschen Sie die Tabelle, und erstellen Sie sie neu.

Das folgende Beispiel zeigt, wie eine vorhandene Tabelle mit dem Namen dbo.SubscriberHistory gelöscht und anschließend ein Verlauf für die StockSubscriptions-Abonnementklasse erstellt wird, die über zwei Spalten verfügt (SubscriberId und NotificationTime):

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

So definieren Sie eine Abonnementverlaufstabelle

Wenn Sie eine Anwendung mithilfe von XML definieren, definieren Sie Verläufe in der Anwendungsdefinitionsdatei (ADF, Application Definition File). Wenn Sie eine Anwendung programmgesteuert definieren, verwenden Sie Notification Services Management Objects (NMO) zum Definieren von Verläufen.

Aktualisieren von Abonnementverläufen

Sie können eine oder mehrere Abfragen zum Bearbeiten von Daten von Abonnementverlaufstabellen definieren. Diese Abfragen fügen Daten in die Verlaufstabellen ein und aktualisieren und löschen Daten in den Verlaufstabellen, um die Tabellen in einem geeigneten Zustand für die Verwendung durch eine Anwendung zu halten.

Sie müssen Abonnementverlaufsregeln in einer neuen Ereignisregel oder geplanten Abonnementregel oder als Bestandteil einer neuen Abonnementregel definieren.

ms172554.note(de-de,SQL.90).gifHinweis:
Es gibt keine Garantien für die Auslösungsreihenfolge zwischen mehreren Ereignisregeln oder mehreren geplanten Regeln.

Der folgende Code zeigt, wie Sie einen Abonnementverlauf für eine Aktienanwendung aktualisieren können. Der Abonnementverlauf verfolgt nach, wann für jeden Abonnenten zuletzt eine Benachrichtigung generiert wurde.

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;

Diese Regel hängt vom Verwenden des Ereignisverlaufs zum Generieren von Benachrichtigungen ab, bevor der SubscriberHistory-Abonnementverlauf aktualisiert wird. Sie sollten diese Regel der Abonnementregel hinzufügen, die Benachrichtigungen generiert, und sie nicht in einer neuen Abonnementregel ablegen.

Weitere Informationen zu Abonnementregeln finden Sie unter Definieren von Abonnementregeln.

Siehe auch

Konzepte

Definieren von Verläufen für eine Ereignisklasse

Andere Ressourcen

Definieren von Abonnementklassen
UPDATE (Transact-SQL)
SET (Transact-SQL)
IF...ELSE (Transact-SQL)
EXISTS (Transact-SQL)
CREATE TABLE (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005