NSPrepareRuleFiring (Transact-SQL)

准备用于规则触发的应用程序数据库。此准备可确保完成以下事项:已计划了一个量程,正确地具体化了事件视图和预订的订阅视图,并且已根据可用的事件与订阅集为量程预定了规则触发。

存储过程完成后,应用程序数据库的状态会等同于正常的生成器操作过程中规则执行之前存在的状态。

语法

[ application_schema_name . ] NSPrepareRuleFiring 
    [ [ @ReportPossibleEventChronicleUsage = ] chronical_usage_flag ]
    [, [ @DisableQuantumLimits = ] quantum_limits_flag ]

参数

[ @ReportPossibleEventChronicleUsage = ] chronical_usage_flag

指示准备好的规则触发过程是否返回一个可能的事件历史记录列表,其中列出受规则触发影响或被其使用的事件历史记录。非零值将使例程返回一个结果集,列出一组与准备好的规则触发关联的事件历史记录。chronical_usage_flag 的数据类型为 tinyint,默认值为 1。

[ @DisableQuantumLimits = ] quantum_limits_flag

指示新量程的计划是否使用应用程序定义文件 (ADF) 中应用程序执行设置的 ChronicleQuantumLimit 值和 SubscriptionQuantumLimit 值。非零值指示存储过程不应使用这些设置来跳过一个或多个量程期。quantum_limits_flag 的数据类型为 tinyint,默认值为 1。

返回代码值

0(成功)或 1(失败)

结果集

NSPrepareRuleFiring 生成一个或两个结果集。第一个结果集包含关于规则的信息。

列名 数据类型 说明

QuantumId

int

规则触发的量程的 ID 号。

QuantumStartTime

datetime

包含规则的量程的开始日期和时间,使用 UTC(通用协调时间或格林尼治标准时间)表示。

QuantumEndTime

datetime

包含规则的量程的结束日期和时间,使用 UTC 表示。

RuleName

nvarchar(255)

在应用程序定义文件 (ADF) 中为规则指定的名称。如果没有可以立即运行的规则,则此值为 NULL。

EventClassName

nvarchar(255)

对于事件触发的规则,是指相关事件类的名称。如果规则是预定的订阅规则,或者没有可以立即运行的规则,则此值为 NULL。

SubscriptionClassName

nvarchar(255)

相关订阅类的名称。如果规则是事件历史记录规则,或者没有可以立即运行的规则,则此值为 NULL。

RuleFiringId

int

标识准备好的规则触发的 ID 号。如果没有可以立即运行的规则触发,则该列为 NULL。

EventBatchId

bigint

标识相关事件批次的 ID 号。如果规则不是事件历史记录或事件订阅规则,应用程序不按顺序处理事件,或者没有可以立即运行的规则,则此值为 NULL。

StartScanTime

datetime

准备好的预定订阅规则的开始日期和时间,使用 UTC 表示。开始日期和时间必须介于 QuantumStartTimeQuantumEndTime 之间。

如果规则不是事件历史记录或事件订阅规则,或者应用程序没有按顺序处理事件,或者没有可以立即运行的规则,则此值为 NULL。

EndScanTime

datetime

准备好的预定订阅规则的结束日期和时间,使用 UTC 表示。结束日期和时间必须介于 QuantumStartTimeQuantumEndTime 之间。

如果规则不是事件历史记录或事件订阅规则,或者应用程序没有按顺序处理事件,或者没有可以立即运行的规则,则此值为 NULL。

RemainingQuantumRuleFirings

int

完成该量程的规则触发所需的剩余规则触发数。此数量的计算包括所有准备好的规则触发,因为这些规则触发尚未运行。如果没有要准备的规则,则此值为 0。

第二个结果集仅在对历史记录可能有影响时才出现。结果集按 PossibleChronicleReferenceByRule 排序。

列名 数据类型 说明

PossibleChronicleReferenceByRule

nvarchar(255)

与准备好的规则触发关联的事件历史记录的名称。

备注

创建实例时,Notification Services 将在应用程序数据库中创建 NSPrepareRuleFiring 存储过程。更新应用程序时,Notification Services 会重新编译该存储过程。

此存储过程在应用程序的架构中,该架构由应用程序定义文件 (ADF) 的 SchemaName 元素指定。如果没有提供架构名称,则默认架构为 dbo

仅当生成器处于禁用或禁用挂起状态时,才能执行此存储过程。

再次调用存储过程时,可以不调用 NSExecuteRuleFiring,但应用程序数据库中的状态不会改变。将应用程序数据库状态移出准备好的规则触发的唯一方式,是使用 NSExecuteRuleFiring 存储过程或启动实例。

权限

执行权限默认授予 NSGeneratorNSRunService 数据库角色、db_owner 固定数据库角色和 sysadmin 固定服务器角色的成员。

示例

A. 报告历史记录用途和使用量程限制

以下示例显示如何准备数据库,以便执行量程 1 的预定规则,并报告事件历史记录的可能用途。规则触发不忽略 ADF 中指定的量程限制。

应用程序使用默认的 SchemaName 设置,这会将所有应用程序对象置于 dbo 架构中。

EXEC dbo.NSSetQuantumClock 
    @QuantumId = 1;
EXEC dbo.NSPrepareRuleFiring 
    @ReportPossibleEventChronicleUsage = 1,
    @DisableQuantumLimits = 0;

B. 使用默认设置

以下示例显示如何准备数据库,以便执行量程 100 的预定规则,并使用存储过程的默认设置。存储过程不报告事件历史记录用途,并忽略量程限制。

在此示例中,存储过程(像所有其他应用程序对象一样)在 Stock 架构中,该架构在 ADF 的 SchemaName 元素中指定。

EXEC dbo.NSSetQuantumClock 
    @QuantumId = 100;
EXEC Stock.NSPrepareRuleFiring;

请参阅

参考

NSExecuteRuleFiring (Transact-SQL)
NSSetQuantumClock (Transact-SQL)
NSSetQuantumClockDate (Transact-SQL)
Notification Services 存储过程 (Transact-SQL)
NSExecuteRuleFiring (Transact-SQL)

其他资源

Notification Services 性能报告
SchemaName Element (ADF)

帮助和信息

获取 SQL Server 2005 帮助