Поделиться через


Использование инструкции 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.

Версия Журнал

5 декабря 2005 г.

Новое содержимое:
  • Добавлены сведения о возможности отклонения действительной продолжительности задержки в зависимости от загруженности сервера.

См. также

Другие ресурсы

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

Справка и поддержка

Получение помощи по SQL Server 2005