Определение хроники для класса подписки

В таблицах хроники подписок хранятся данные подписок, которые используются приложением. Например, таблицу хроники подписок можно использовать для хранения сведений о последнем уведомлении, доставленном подписчику, и создания следующего уведомления на основе данных, полученных за промежуточный интервал.

Общее использование хроники подписок

Как правило, хроники подписок хранят данные о предыдущих уведомлениях. При создании уведомлений приложение использует эти данные для определения, когда подписчик получил последнее уведомление или получал ли подписчик подобное уведомление.

Наглядным примером использования таблицы хроники подписок является приложение, в котором можно ограничить отправку каждому подписчику только одного уведомления за интервал времени. Можно определить хронику подписки, в которой имеется одна строка для подписчика и временная метка, указывающая, когда было создано последнее уведомление.

При создании уведомлений можно включить условие, по которому уведомления создаются только если подписчик не получал уведомления за последние 24 часа. Если подписчик не получал уведомлений, то добавьте уведомление в таблицу уведомлений и обновите временную метку в хронике подписок.

Таблицы хроники подписок

Хроники подписок реализованы в виде таблиц. При определении класса подписки с помощью инструкции языка Transact-SQL CREATE TABLE можно назначить одну, ни одной или несколько таблиц хроники. Эта инструкция должна включать имя таблицы, имена полей и типы данных полей. Эта инструкция может также включать аргументы для ограничений и других необязательных параметров CREATE TABLE. Можно также включить инструкцию CREATE INDEX для создания индекса таблицы хроники событий. Дополнительные сведения см. в разделе CREATE TABLE (Transact-SQL).

В отличие от других таблиц подписок Notification Services не выполняют автоматического переименования таблиц хроники подписок при обновлении приложения. Инструкции, предназначенные для создания таблицы хроники, завершаются ошибкой, если таблица с таким именем уже существует. Используйте представление INFORMATION_SCHEMA.TABLES для проверки существования таблицы, затем либо пропустите создание таблицы, либо удалите и вновь создайте таблицу.

В следующих примерах показано, как удалить существующую таблицу с именем dbo.SubscriberHistory, а затем создать хронику для класса подписки StockSubscriptions, содержащего два столбца (SubscriberId и 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(ru-ru,SQL.90).gifПримечание.
Если приложение определяется в XML-файле, то необходимо заменить зарезервированные символы XML, например «>», ссылками на сущности. Дополнительные сведения см. в разделе XML Reserved Characters.

Определение таблицы хроники подписок

При определении приложения посредством XML задайте хроники в файле определения приложения (ADF). При определении приложения программным путем используйте управляющие объекты служб Notification Services для определения хроники.

Обновление хроники подписок

Можно определить один или несколько запросов для управления данными в таблицах хроники подписок. Эти запросы вставляют, обновляют и удаляют данные в таблицах хроники для сохранения соответствующего состояния таблиц, используемых приложением.

Необходимо определить правила хроники подписок в новом событии или правиле плановой подписки или в качестве части нового правила подписки.

ms172554.note(ru-ru,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