Usando WAITFOR
A instrução WAITFOR suspende a execução de um lote, procedimento armazenado ou transação até que:
Um intervalo de tempo especificado tenha passado.
Uma hora especificada do dia seja alcançada.
Uma instrução RECEIVE especificada modifique ou retorne pelo menos uma linha a uma fila do Agente de Serviços.
O atraso de tempo real pode variar da hora especificada e depende do nível de atividade do servidor. O contador de tempo iniciará quando o thread associado à instrução WAITFOR for agendado. Se o servidor estiver ocupado, o thread poderá não ser agendado imediatamente; portanto, o atraso de tempo pode ser maior que o tempo especificado.
A instrução WAITFOR é especificada com uma das seguintes cláusulas:
A palavra-chave DELAY seguida por um time_to_pass antes de completar a instrução WAITFOR. O tempo de espera antes de completar a instrução WAITFOR pode ser de até 24 horas.
O seguinte exemplo usa a palavra-chave DELAY para aguardar por dois segundos antes de executar uma instrução SELECT:
WAITFOR DELAY '00:00:02'; SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
A palavra-chave TIME seguida por um time_to_executeque especifica a hora que a instrução WAITFOR é concluída.
O seguinte exemplo usa a palavra-chave TIME para aguardar até as 22 horas. (22:00) para executar uma verificação do banco de dados AdventureWorks para assegurar que todas as páginas estejam corretamente alocadas e usadas:
USE AdventureWorks; GO BEGIN WAITFOR TIME '22:00'; DBCC CHECKALLOC; END; GO
Uma cláusula de instrução RECEIVE que recupera uma ou mais mensagens de uma fila do Agente de Serviços. Quando WAITFOR é especificada com uma instrução RECEIVE, a instrução aguarda pela mensagem para chegar à fila, se nenhuma mensagem estiver presente no momento.
A palavra-chave TIMEOUT seguida por um timeout especifica quanto tempo, em milissegundos, o Service Broker espera por uma mensagem para chegar à fila. O TIMEOUT pode ser especificado na instrução RECEIVE ou na instrução GET CONVERSATION GROUP.
Consulte também