Использование инструкции WAITFOR
Инструкция WAITFOR приостанавливает выполнение пакета, хранимой процедуры или транзакции до тех пор, пока:
не пройдет заданный интервал времени;
не наступит заданное время суток;
инструкция RECEIVE не изменит или не возвратит, по крайней мере, одну строку в очередь компонента Service Broker.
Действительная продолжительность задержки может отличаться от заданного времени и зависит от уровня загруженности сервера. Счетчик времени запускается, когда запланирован поток, связанный с инструкцией WAITFOR. Если сервер занят, запланированный запуск потока может оказаться невозможным, поэтому время задержки может оказаться больше заданного.
Инструкция WAITFOR задается с одним из следующих предложений.
Ключевым словом DELAY, за которым следует аргумент time_to_pass времени до завершения инструкции WAITFOR. Период времени ожидания завершения инструкции WAITFOR может задаваться до 24 часов.
В следующем примере ключевое слово DELAY используется для установки ожидания в течение двух секунд до выполнения инструкции SELECT:
WAITFOR DELAY '00:00:02'; SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
Ключевым словом TIME, за которым следует аргумент time_to_execute, задающий время завершения инструкции WAITFOR.
В следующем примере ключевое слово TIME используется для установки ожидания наступления 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.
См. также