NSExecuteRuleFiring (Transact-SQL)
准备并运行 Microsoft SQL Server Notification Services 规则。这样便可手动运行生成器,同时运行规则生成通知并管理状态。
无论规则触发是否成功,此存储过程都会具体化相应事件和预定的订阅视图来准备下一次规则触发,以便您能够调试规则触发行为。
语法
[ application_schema_name . ] NSExecuteRuleFiring
[ [ @ReportExecutionResults = ] report_flag ]
[, [ @DisableQuantumLimits = ] limit_flag ]
参数
[@ReportExecutionResults = ] report_flag
指示存储过程是否报告有关执行规则触发的信息。非零值会导致返回有关规则触发的信息。report_flag 的数据类型为 tinyint,默认值为 1。
[@DisableQuantumLimits = ] limit_flag
指示存储过程是否遵守应用程序指定的事件历史记录量程和订阅量程限制。非零值将导致量程计划忽略量程限制。limit_flag 的数据类型为 tinyint,默认值为 1。
返回代码值
0(成功)或 1(失败)
结果集
NSExecuteRuleFiring 最多可生成三个结果集。第一个结果集包含有关所有预定规则的信息。
列名 | 数据类型 | 说明 |
---|---|---|
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 表示。开始日期和时间必须介于 QuantumStartTime 和 QuantumEndTime 之间。 如果规则不是事件历史记录或事件订阅规则,或者应用程序没有按顺序处理事件,或者没有可以立即运行的规则,则此值为 NULL。 |
EndScanTime |
datetime |
准备好的预定订阅规则的结束日期和时间,使用 UTC 表示。结束日期和时间必须介于 QuantumStartTime 和 QuantumEndTime 之间。 如果规则不是事件历史记录或事件订阅规则,或者应用程序没有按顺序处理事件,或者没有可以立即运行的规则,则此值为 NULL。 |
RemainingQuantumRuleFirings |
int |
完成该量程的规则触发所需的剩余规则触发数。此数目的计数中包括所有准备好的规则触发,因为它们尚未运行。如果没有要准备的规则,则此值为 0。 |
第二个结果集仅在可能会影响历史记录时才出现。结果集按 PossibleChronicleReferenceByRule 排序。
列名 | 数据类型 | 说明 |
---|---|---|
PossibleChronicleReferenceByRule |
nvarchar(255) |
与准备好的规则触发关联的事件历史记录名称。 |
仅当存储过程创建了通知时,才生成第三个结果集。结果集包括有关通知的信息,并按 NotificationClassName 值进行分组。
列名 | 数据类型 | 说明 |
---|---|---|
NotificationClassName |
nvarchar(255) |
生成通知的通知类名称。 |
NotificationBatchId |
bigint |
包含已生成通知的通知批次 ID 号。 |
NotificationCount |
bigint |
规则触发生成的通知数。 |
StartGenerationTime |
datetime |
通知批次的开始日期和时间,使用 UTC 时间表示。 |
EndGenerationTime |
datetime |
通知批次的结束日期和时间,使用 UTC 时间表示。 |
备注
创建实例时,Notification Services 将在应用程序数据库中创建 NSExecuteRuleFiring 存储过程。当您更新应用程序时,Notification Services 会重新编译此存储过程。
此存储过程位于应用程序的架构中,该架构由应用程序定义文件 (ADF) 的 SchemaName 元素指定。如果没有提供架构名称,默认架构为 dbo。
若要运行 NSExecuteRuleFiring 存储过程,必须禁用生成器。由于此存储过程可以手动操作生成器,因此允许生成器同时运行将会使存储过程变得难以使用。
如果仅需为规则触发准备应用程序数据库,而不是实际触发此规则,请使用 NSPrepareRuleFiring 存储过程。
权限
执行权限默认授予 NSGenerator 和 NSRunService 数据库角色、db_owner 固定数据库角色以及 sysadmin 固定服务器角色的成员。
示例
A. 报告结果并忽略量程限制
下面的示例显示如何将量程 ID 设置为 1,然后触发该量程的规则。此存储过程会报告结果并忽略在 ADF 中指定的量程限制。
应用程序使用默认的 SchemaName 设置,这会将所有应用程序对象置于 dbo 架构中。
EXEC dbo.NSSetQuantumClock
@QuantumId = 1;
EXEC dbo.NSExecuteRuleFiring
@ReportExecutionResults = 1,
@DisableQuantumLimits = 0;
若在运行此示例后启用应用程序,量程时钟会从量程 ID 1 继续;启用量程时钟时,量程时钟不会自动将自己重置为最新量程。
B. 使用默认设置
下面的示例显示如何将量程 ID 设置为 100,然后使用默认设置触发该量程的规则。存储过程不报告结果,但是将忽略量程限制。
在本示例中,存储过程(类似于所有其他应用程序对象)位于在 ADF 的 SchemaName 元素中指定 Stock 架构中。
EXEC dbo.NSSetQuantumClock
@QuantumId = 100;
EXEC Stock.NSExecuteRuleFiring;
若在运行此示例后启用应用程序,量程时钟从量程 ID 100 继续;启用量程时钟时,量程时钟不会自动将自己重置为最新量程。
请参阅
参考
NSPrepareRuleFiring (Transact-SQL)
NSSetQuantumClock (Transact-SQL)
NSSetQuantumClockDate (Transact-SQL)
Notification Services 存储过程 (Transact-SQL)
NSPrepareRuleFiring (Transact-SQL)
其他资源
Notification Services 性能报告
SchemaName Element (ADF)