WAITFOR の使用

WAITFOR ステートメントを使用すると、次の条件が満たされるまで、バッチ、ストアド プロシージャ、またはトランザクションを中断できます。

  • 指定された時間が経過する。
  • 指定された時刻になる。
  • 指定した RECEIVE ステートメントにより、少なくとも 1 行が変更されるか Service Broker キューに返される。

実際の遅延時間は、指定した時間と異なる場合があり、サーバーの利用状況のレベルに依存します。WAITFOR ステートメントと関連付けられたスレッドがスケジュールされると、時間カウンタが開始します。サーバーがビジー状態の場合、スレッドが直ちにスケジュールされないことがあります。したがって、遅延時間は指定した時間より長くなる可能性があります。

WAITFOR ステートメントは次のいずれかの句を使用して指定します。

  • DELAY キーワードと、その後に WAITFOR ステートメントを完了するまでの時間を指定する time_to_pass。WAITFOR ステートメントを完了するまでの時間は最大 24 時間です。
    次の例では、DELAY キーワードを使用して、2 秒待機してから SELECT ステートメントを実行しています。

    WAITFOR DELAY '00:00:02'
    SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
    
  • TIME キーワードと、その後に WAITFOR ステートメントの完了時刻を指定する time_to_execute
    次の例では、TIME キーワードを使用して、AdventureWorks データベースのすべてのページが、正しく割り当てられて使用されているかどうかのチェックを、午後 10 時 (22:00) に実行するように指定しています。

    USE AdventureWorks;
    GO
    BEGIN
        WAITFOR TIME '22:00';
        DBCC CHECKALLOC;
    END;
    GO
    
  • 1 つ以上のメッセージを Service Broker キューから取得する RECEIVE ステートメント句。RECEIVE ステートメントと共に WAITFOR を指定すると、現在の Service Broker キューにメッセージが存在しない場合に、メッセージがキューに到着するまでステートメントが待機されます。

  • キューにメッセージが到達するまでの Service Broker の待機時間 (ミリ秒単位) を指定する timeout が続く TIMEOUT キーワード。TIMEOUT は、RECEIVE ステートメント内または GET CONVERSATION GROUP ステートメント内で指定できます。

リリース 履歴

2005 年 12 月 5 日

新しい内容 :
  • サーバーレベルの利用状況によって実際の遅延時間が変動する可能性についての情報を追加しました。

参照

その他の技術情報

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手