定义通知架构

订阅规则将通知插入通知视图。这是一个建立在通知表基础上的视图,并根据通知类进行命名。视图和基础表的架构均派生自通知类架构。您可以在通知类中定义组成此架构的字段。

本主题将介绍 Notification Services 添加到架构中的默认字段,以及如何为通知数据创建自定义字段(包括自定义计算字段)。

默认通知字段

创建存储某个通知类的通知的表时,Notification Services 将为每个声明的通知字段在表中创建一列,并添加用于设置通知格式和传递通知的其他五个列:

ms172546.note(zh-cn,SQL.90).gif注意:
请不要在通知类架构中定义下列字段。如若不然,创建应用程序将因为重复的字段定义而失败。
  • NotificationId 是一个 bigint 列。Notification Services 将为每个通知的此字段提供一个值。该值在通知类中是唯一的。
  • NotificationBatchId 是一个 bigint 列。生成通知的每次规则触发都会生成一个或多个通知批次。Notification Services 会自动将批号插入通知表。
  • SubscriberId 是一个 nvarchar(255) 列,其中包含生成的通知的订阅方的 ID。Notification Services 使用订阅方 ID 来查找通知的传递信息。生成通知的订阅规则必须插入此值。
  • DeviceName 是一个 nvarchar(255) 列,其中包含存储在实例数据库的 SubscriberDevices 表中的订阅方设备的名称。Notification Services 使用设备名称来获得传递信息,并可向内容格式化程序提供设备名称供自定义格式。生成通知的订阅规则必须插入此值。请注意,SubscriberIdDeviceName 对必须与 SubscriberDevices 表中的某个记录匹配。
  • SubscriberLocale 是一个 nvarchar(10) 列,其中包含区域设置代码。此区域设置代码必须是受支持的区域设置代码之一,并且必须由订阅规则插入。Notification Services 将此信息传递给内容格式化程序,以便设置特定于区域设置的格式。有关受支持的代码列表,请参阅Subscriber Locale Codes

通知表中的后续列按通知类中的通知字段定义。自定义了字段后,Notification Services 将再添加三个用于跟踪通知传递的字段:

  • DeliveryStatusCode 是一个 tinyint 列,其中包含传递状态的代码。此信息不可用于报告。
  • SentTime 是一个 datetime 列,其中包含传递协议报告通知传递状态的时间。
  • LinkNotificationId 是一个 bigint 列,仅在使用摘要传递时才与此列相关。如果通知包含在摘要中,但不是摘要中的第一条通知,则此字段将包含第一条通知的 ID。第一条通知包含状态和时间信息。

这些字段不可用于调试和报告。在调试和报告时,请使用 NS<NotificationClassName>NotificationDistribution 视图,它会以更易读的格式提供此信息。

自定义通知字段

自定义字段是指存储订阅方感兴趣的数据的字段,或者是存储用于生成最终通知的数据的字段。

定义通知类的自定义字段需要了解要发送哪些数据,并且必须与生成通知的订阅规则生成的数据匹配。

对于每个自定义字段,都必须定义字段名称和数据类型。如果要发送包含天气预报的通知,则可能要定义以下通知字段:

  • 字段名称:地市;字段类型:nvarchar(35)
  • 字段名称:省/自治区;字段类型:nvarchar(35)
  • 字段名称:预报;字段类型:nvarchar(3500)

这些字段的数据类型必须与生成通知时使用的源数据类型兼容。

如果使用的是摘要传递,并希望将同一个省/自治区的所有订阅方的通知分为一组,则将该字段的摘要分组设置为 true。**“省/自治区”**字段的新定义如下:

  • 字段名称:省/自治区;字段类型:nvarchar(35);摘要分组:true

有关摘要传递的详细信息,请参阅指定摘要或多播传递

定义通知类的字段

计算字段

计算字段允许在将内容传递到内容格式化程序之前立即计算通知数据。

在将通知传递到内容格式化程序之前,计算字段使用 Transact-SQL 表达式为通知字段立即生成一个值。可以使用的 Transact-SQL 表达式,是任何可在应用程序数据库中作为 SELECT 查询的一部分而计算的表达式,其中包括使用任意常量以及进行函数调用。

ms172546.note(zh-cn,SQL.90).gif注意:
在 Transact-SQL 语法中,字符串常量必须带英文引号。因此,如果在计算字段中使用字符串,则必须用英文单引号中将其括起来。如果是 Unicode 字符串,则还需要加上前缀 N,如 N'myString'。

如果要在通知类中添加计算字段,则需要定义字段名称和 Transact-SQL 表达式。例如,如果要将价格转换为格式化字符串,则可能要在计算字段定义中指定以下内容:

  • 字段名称:FormattedStockPrice
  • Transact-SQL 表达式:CONVERT(NVARCHAR(10), StockPrice, 1)

将通知发送给内容格式化程序时,此计算字段将提取 StockPrice 字段中的值,并将其转换为格式化字符串。例如,如果 StockPrice 字段的 money 类型值为 1000.70,则 FormattedStockPrice 将为以下字符串: 1,000.70.

您也可以指定使用计算字段来确定为进行摘要传递分组的通知。若要将具有相同计算字段值的通知分为一组,请将计算字段的摘要分组属性设置为 true

定义通知类的计算字段

请参阅

概念

配置内容格式化程序
指定摘要或多播传递
指定通知批次大小
指定通知到期时间
指定摘要或多播传递

其他资源

定义通知类
配置传递协议
表达式(Transact-SQL)
CREATE TABLE (Transact-SQL)
定义通知类
定义 Notification Services 应用程序

帮助和信息

获取 SQL Server 2005 帮助