使用 WAITFOR
WAITFOR 陳述式會暫停批次、預存程序或交易的執行,直到:
超過指定時間間隔 (Time Interval)。
到達指定時間。
指定的 RECEIVE 陳述式會修改或傳回至少一列資料列給 Service Broker 佇列。
實際的時間延遲可能與指定的時間不同,而且會隨著伺服器的活動層級而異。排定與 WAITFOR 陳述式相關聯的執行緒後,時間計數器便會啟動。如果伺服器處於忙碌狀態,執行緒可能不會立即排程;因此時間延遲可能比指定的時間還長。
以下列其中一個子句來指定 WAITFOR 陳述式:
後面接著 time_to_pass 的 DELAY 關鍵字,可用來指定完成 WAITFOR 陳述式之前的等待時間。完成 WAITFOR 陳述式前需等待的時間,最多 24 小時。
下列範例使用 DELAY 關鍵字,指定在執行 SELECT 陳述式之前需等兩秒:
WAITFOR DELAY '00:00:02'; SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
後面接著 time_to_execute 的 TIME 關鍵字,可用來指定 WAITFOR 陳述式完成的時間。
下列範例使用 TIME 關鍵字,指定等到晚上 10 點 (22:00) 再執行 AdventureWorks 資料庫的檢查,以確定所有分頁的配置及用法無誤:
USE AdventureWorks; GO BEGIN WAITFOR TIME '22:00'; DBCC CHECKALLOC; END; GO
RECEIVE 陳述式子句,可從 Service Broker 佇列擷取一或多則訊息。當 WAITFOR 與 RECEIVE 陳述式一起指定時,若目前未出現訊息,則陳述式會等候訊息到達佇列。
後面接著 timeout 的 TIMEOUT 關鍵字可指定時間長度 (以毫秒為單位),這是 Service Broker 等候訊息到達佇列的時間長度。TIMEOUT 可以在 RECEIVE 陳述式或在 GET CONVERSATION GROUP 陳述式中加以指定。