添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
乐观的桔子  ·  WAITFOR ...·  3 周前    · 
开心的苦咖啡  ·  datetime2 ...·  3 周前    · 
傻傻的野马  ·  CREATE SYMMETRIC KEY ...·  2 周前    · 
风流的韭菜  ·  HONOR MagicBook 15 ...·  2 月前    · 
玩命的企鹅  ·  Dezoomify·  3 月前    · 
兴奋的口罩  ·  ResourceBundle.getBund ...·  11 月前    · 
DELAY 'time_to_pass' | TIME 'time_to_execute' | [ ( receive_statement ) | ( get_conversation_group_statement ) ] [ , TIMEOUT timeout ]

Arguments

DELAY

在批次、預存程式或交易執行之前,必須經過最多 24 小時的指定時間週期。

' time_to_pass '

要等候的時間週期。 time_to_pass 可以使用 日期時間 數據格式或局部變數來指定。 無法指定日期,因此不允許 datetime值的日期 部分。 time_to_pass 格式為 hh:mm[[:ss].fff]

批次、預存程式或交易執行的指定時間。

' time_to_execute '

WAITFOR 語句完成的時間。 time_to_execute 可以 指定日期時間 數據格式,也可以指定為局部變數。 無法指定日期,因此不允許 datetime值的日期 部分。 time_to_execute 格式 hh:mm[[:ss].fff] 為 ,而且可以選擇性地包含的 1900-01-01 日期。

receive_statement 適用於 :僅限 Service Broker 訊息。 如需詳細資訊,請參閱 RECEIVE

有效的 RECEIVE 語句。

get_conversation_group_statement 適用於 :僅限 Service Broker 訊息。 如需詳細資訊,請參閱 GET CONVERSATION GROUP

有效的 GET CONVERSATION GROUP 語句。

TIMEOUT timeout

適用於 :僅限 Service Broker 訊息。 如需詳細資訊,請參閱 RECEIVE GET CONVERSATION GROUP

指定等待訊息到達佇列的時段 (以毫秒為單位)。

Remarks

WAITFOR 當語句執行時,交易正在執行,而且其他要求無法在同一筆交易下執行。

實際時間延遲可能會因 time_to_pass time_to_execute 時中指定的時間而有所不同,而且取決於伺服器的活動層級。 時間計數器會在排程語句線程時 WAITFOR 啟動。 如果伺服器忙碌中,線程可能不會立即排程,因此時間延遲時間可能會超過指定的時間。

WAITFOR 不會變更查詢的語意。 如果查詢無法傳回任何數據列,則如果指定, WAITFOR 會永遠等候或直到 TIMEOUT 到達為止。

數據指標無法在語句上 WAITFOR 開啟。

無法在語句上 WAITFOR 定義檢視。

當查詢超過查詢等候選項時, WAITFOR 語句自變數可以在不執行的情況下完成。 如需組態選項的詳細資訊,請參閱伺服器組 態:查詢等候 。 若要查看作用中和等候中的進程,請使用 sp_who

每個 WAITFOR 語句都有與其相關聯的線程。 如果在同一部伺服器上指定了許多 WAITFOR 語句,則可以系結許多線程,等待這些語句執行。 SQL Server 會監視語句線程的數目 WAITFOR ,並隨機選取其中一些線程,以在伺服器開始遇到線程耗盡時結束。

您可以藉由在交易內執行具有 WAITFOR 的查詢來建立死結,該查詢也會保留鎖定,以防止語句存取 WAITFOR 的數據列集變更。 SQL Server 會識別這些狀況,並在此類死結有可能存在時,傳回空的結果集。

Caution

包括 WAITFOR 慢速完成 SQL Server 進程,並可能導致應用程式中出現逾時訊息。 必要時,請在應用程式層級調整連接的逾時設定。

Examples

A. 使用 WAITFOR TIME

下列範例會在下午 10:20 ( sp_update_job ) 執行資料庫中的 msdb 預存程式 22:20

EXECUTE sp_add_job @job_name = 'TestJob';
BEGIN
    WAITFOR TIME '22:20';
    EXECUTE sp_update_job @job_name = 'TestJob',
        @new_name = 'UpdatedJob';

B. 使用 WAITFOR DELAY

下列範例會在延遲兩小時之後執行預存程序。

BEGIN
    WAITFOR DELAY '02:00';
    EXECUTE sp_helpdb;

C. 搭配局部變數使用 WAITFOR DELAY

下列範例顯示如何搭配 WAITFOR DELAY 選項來使用本機變數。 這預存程序會等待一陣可變的時段,再將經歷的時、分、秒數資訊傳回給使用者。

IF OBJECT_ID('dbo.TimeDelay_hh_mm_ss','P') IS NOT NULL
    DROP PROCEDURE dbo.TimeDelay_hh_mm_ss;
CREATE PROCEDURE dbo.TimeDelay_hh_mm_ss (@DelayLength char(8)= '00:00:00')
DECLARE @ReturnInfo VARCHAR(255)
IF ISDATE('2000-01-01 ' + @DelayLength + '.000') = 0
    BEGIN
        SELECT @ReturnInfo = 'Invalid time ' + @DelayLength
        + ',hh:mm:ss, submitted.';
        -- This PRINT statement is for testing, not use in production.
        PRINT @ReturnInfo
        RETURN(1)
BEGIN
    WAITFOR DELAY @DelayLength
    SELECT @ReturnInfo = 'A total time of ' + @DelayLength + ',
        hh:mm:ss, has elapsed! Your time is up.'
    -- This PRINT statement is for testing, not use in production.
    PRINT @ReturnInfo;
/* This statement executes the dbo.TimeDelay_hh_mm_ss procedure. */
EXEC TimeDelay_hh_mm_ss '00:00:10';

結果集如下所示。

A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.

              Control-of-Flow
              datetime (Transact-SQL)
              sp_who (Transact-SQL)