WAITFOR の使用
WAITFOR ステートメントを使用すると、次の条件が満たされるまで、バッチ、ストアド プロシージャ、またはトランザクションを中断できます。
指定された時間が経過する。
指定された時刻になる。
指定した RECEIVE ステートメントにより、少なくとも 1 行が変更されるか Service Broker キューに返される。
実際の遅延時間は、指定した時間と異なる場合があり、サーバーの利用状況のレベルに依存します。WAITFOR ステートメントと関連付けられたスレッドがスケジュールされると、時間カウンターが開始します。サーバーがビジー状態の場合、スレッドが直ちにスケジュールされないことがあります。したがって、遅延時間は指定した時間より長くなる可能性があります。
WAITFOR ステートメントは次のいずれかの句を使用して指定します。
DELAY キーワードと、その後に WAITFOR ステートメントを完了するまでの時間を指定する time_to_pass。WAITFOR ステートメントを完了するまでの時間は最大 24 時間です。
次の例では、DELAY キーワードを使用して、2 秒待機してから SELECT ステートメントを実行しています。
WAITFOR DELAY '00:00:02'; SELECT BusinessEntityID FROM AdventureWorks2008R2.HumanResources.Employee;
TIME キーワードと、その後に WAITFOR ステートメントの完了時刻を指定する time_to_execute。
次の例では、TIME キーワードを使用して、AdventureWorks データベースのすべてのページが、正しく割り当てられて使用されているかどうかのチェックを、午後 10 時 (22:00) に実行するように指定しています。
USE AdventureWorks2008R2; 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 ステートメント内で指定できます。