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 |
規則引發的配量識別碼。 |
QuantumStartTime |
datetime |
規則所在配量的開始日期和時間,以國際標準時間 (UTC) 或格林威治標準時間 (GMT) 表示。 |
QuantumEndTime |
datetime |
規則所在配量的結束日期和時間 (以 UTC 為單位)。 |
RuleName |
nvarchar(255) |
應用程式定義檔案 (ADF) 中指派給規則的名稱。如果沒有準備執行的規則,這個值就是 NULL。 |
EventClassName |
nvarchar(255) |
事件觸發規則的相關事件類別名稱。如果規則是已排程訂閱規則,或沒有準備執行的規則,這個值就是 NULL。 |
SubscriptionClassName |
nvarchar(255) |
相關訂閱類別的名稱。如果規則是事件紀事輯規則,或沒有準備執行的規則,這個值就是 NULL。 |
RuleFiringId |
int |
用來識別備妥的規則引發之識別碼。如果沒有已準備執行的規則引發,這個資料行就是 NULL。 |
EventBatchId |
bigint |
用來識別相關事件批次的識別碼。如果規則不是事件紀事輯或事件訂閱規則、應用程式並未循序處理事件,或沒有準備執行的規則,這個值就是 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 |
產生的通知所在之通知批次的識別碼。 |
NotificationCount |
bigint |
規則引發所產生的通知數目。 |
StartGenerationTime |
datetime |
通知批次的開始日期和時間 (以 UTC 為單位)。 |
EndGenerationTime |
datetime |
通知批次的結束日期和時間 (以 UTC 為單位)。 |
備註
當您建立執行個體時,Notification Services 會在應用程式資料庫中,建立 NSExecuteRuleFiring 預存程序。當您更新應用程式時,Notification Services 會重新編譯預存程序。
這個預存程序在應用程式定義檔案 (ADF) 的 SchemaName 元素所指定的應用程式結構描述中。如果未提供結構描述名稱,預設結構描述便是 dbo。
必須停用產生器,才能執行 NSExecuteRuleFiring 預存程序。由於這個預存程序會手動操作產生器,因此,允許同時執行產生器會使這個預存程序變成難以使用。
如果您要準備規則引發的應用程式資料庫,但並不要真正引發規則,請使用 NSPrepareRuleFiring 預存程序。
權限
執行權限預設會授與 NSGenerator 和 NSRunService 資料庫角色、db_owner 固定資料庫角色以及系統管理員 (sysadmin) 固定伺服器角色的成員。
範例
A. 報告結果和忽略配量限制
下列範例會顯示如何將配量識別碼設為 1,之後,再引發這項配量的規則。預存程序會報告結果及忽略 ADF 中指定的配量限制。
應用程式使用預設的 SchemaName 設定,這項設定會將所有應用程式物件放在 dbo 結構描述中。
EXEC dbo.NSSetQuantumClock
@QuantumId = 1;
EXEC dbo.NSExecuteRuleFiring
@ReportExecutionResults = 1,
@DisableQuantumLimits = 0;
當您在執行這個範例之後啟用應用程式時,配量時鐘會繼續從配量識別碼 1 開始;當啟用時,配量時鐘本身並不會自動重設成最近的配量。
B. 使用預設值
下列範例會顯示如何將配量識別碼設為 100,之後,再利用預設值來引發這項配量的規則。預存程序不會報告結果,且會忽略配量限制。
在這個範例中,依照 ADF 的 SchemaName 元素所指定,預存程序 (如同所有其他應用程式物件) 是在 Stock 結構描述中。
EXEC dbo.NSSetQuantumClock
@QuantumId = 100;
EXEC Stock.NSExecuteRuleFiring;
當您在執行這個範例之後啟用應用程式時,配量時鐘會繼續從配量識別碼 100 開始;當啟用時,配量時鐘本身並不會自動重設成最近的配量。
請參閱
參考
NSPrepareRuleFiring (Transact-SQL)
NSSetQuantumClock (Transact-SQL)
NSSetQuantumClockDate (Transact-SQL)
Notification Services 預存程序 (Transact-SQL)
NSPrepareRuleFiring (Transact-SQL)
其他資源
Notification Services 效能報告
SchemaName Element (ADF)