为订阅类定义历史记录

订阅历史记录表存储用于应用程序的订阅数据。例如,您可能使用订阅历史记录表存储有关传递到订阅方的上一个通知的信息,并在生成下一个通知时仅依据两个通知的间隔时间内进入的数据。

订阅历史记录的一般用途

订阅历史记录通常存储有关以前通知的数据。生成通知时,应用程序可使用这些数据来确定订阅方上次接收到通知的时间,或订阅方是否收到过类似的通知。

例如,如果要在应用程序中限制每个订阅方在每个时间段内只接收一个通知,即可使用订阅历史记录表。您可以定义一个订阅历史记录,为每个订阅方包含一行,并使用一个时间戳指示上一个通知的生成时间。

生成通知时,可包含一个条件以便仅当订阅方在过去 24 小时内未接收到通知时才生成通知。如果订阅方最近未接收到通知,则将此通知添加到通知表中,并更新订阅历史记录中的时间戳。

订阅历史记录表

订阅历史记录是作为表实现的。定义订阅类时,可使用 Transact-SQL CREATE TABLE 语句定义零个、一个或多个历史记录表。该语句必须包括表名、字段名称和字段数据类型。该语句还可包括约束参数以及任何其他可选的 CREATE TABLE 参数。您还可以包括 CREATE INDEX 语句,以创建事件历史记录表的索引。有关详细信息,请参阅 CREATE TABLE (Transact-SQL)

当更新应用程序时,Notification Services 不会自动重命名订阅历史记录表,这与对其他订阅表的做法一样。如果存在具有相同名称的表,则创建历史记录表的语句失败。可使用 INFORMATION_SCHEMA.TABLES 视图验证该表是否存在,然后跳过创建该表,或删除该表再重新创建该表。

下面的示例说明如何删除名称为 dbo.SubscriberHistory 的现有表,然后创建 StockSubscriptions 订阅类的历史记录表,该表有两列(SubscriberIdNotificationTime):

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(zh-cn,SQL.90).gif注意:
如果在 XML 文件中定义应用程序,则必须使用保留 XML 字符的实体引用来替换保留 XML 字符(例如“>”)。有关详细信息,请参阅 XML Reserved Characters

定义订阅历史记录表

如果您通过 XML 定义应用程序,请在应用程序定义文件 (ADF) 中定义历史记录。如果以编程方式定义应用程序,请使用 Notification Services 管理对象 (NMO) 定义历史记录。

更新订阅历史记录

可定义一个或多个查询来操纵订阅历史记录表数据。这些查询在历史记录表中插入、更新以及删除数据,从而使表保持正确的状态,以便应用程序使用。

必须在新事件或已计划的订阅规则中定义订阅历史记录规则,或将其作为新订阅规则的一部分进行定义。

ms172554.note(zh-cn,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 帮助