共用方式為


使用 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 陳述式中加以指定。

版本 歷程記錄

2005 年 12 月 5 日

新增內容:
  • 新增有關實際時間延遲可能隨著伺服器層級活動而變動的資訊。

請參閱

其他資源

RECEIVE (Transact-SQL)
WAITFOR (Transact-SQL)
GET CONVERSATION GROUP (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助