Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do
AzureInstância
Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric
Bloqueia a execução de um lote, procedimento armazenado ou transação até que uma hora ou intervalo de tempo especificado transcorra ou que uma instrução especificada modifique ou retorne pelo menos uma linha.
Convenções de sintaxe de Transact-SQL
Syntax
WAITFOR
{
DELAY 'time_to_pass'
| TIME 'time_to_execute'
| [ ( receive_statement ) | ( get_conversation_group_statement ) ]
[ , TIMEOUT timeout ]
}
Arguments
DELAY
O período de tempo especificado que deve passar, até um máximo de 24 horas, antes da execução de um lote, procedimento armazenado ou continuação da transação.
'time_to_pass'
O período de espera.
time_to_pass pode ser especificado em um formato de dados datetime ou como uma variável local. As datas não podem ser especificadas, portanto, a parte de data do valor datetime não é permitida.
time_to_pass é formatado como hh:mm[[:ss].fff].
TIME
A hora especificada em que o lote, o procedimento armazenado ou a transação são executados.
'time_to_execute'
A hora em que a instrução WAITFOR é concluída.
time_to_execute pode ser especificado em um formato de dados datetime ou pode ser especificado como uma variável local. As datas não podem ser especificadas, portanto, a parte de data do valor datetime não é permitida.
time_to_execute é formatado como hh:mm[[:ss].fff] e, opcionalmente, pode incluir a data de 1900-01-01.
receive_statement
Aplica-se apenas a: mensagens do Service Broker. Para obter mais informações, consulte RECEIVE.
Uma instrução válida RECEIVE .
get_conversation_group_statement
Aplica-se apenas a: mensagens do Service Broker. Para obter mais informações, consulte GET CONVERSATION GROUP.
Uma instrução válida GET CONVERSATION GROUP .
TEMPO DE ESPERA
Aplica-se apenas a: mensagens do Service Broker. Para obter mais informações, consulte RECEIVE e GET CONVERSATION GROUP.
Especifica o período de hora, em milissegundos, a esperar pela chegada de uma mensagem na fila.
Remarks
Enquanto a WAITFOR instrução é executada, a transação está em execução e nenhuma outra solicitação pode ser executada na mesma transação.
O atraso de tempo real pode variar do tempo especificado em time_to_pass, time_to_execute ou tempo limite e depende do nível de atividade do servidor. O contador de tempo é iniciado quando o thread de WAITFOR instrução é agendado. Se o servidor estiver ocupado, o thread poderá não ser agendado imediatamente, portanto, o atraso de tempo poderá ser maior do que o tempo especificado.
WAITFOR não altera a semântica de uma consulta. Se uma consulta não puder retornar nenhuma linha, WAITFOR aguardará para sempre ou até TIMEOUT que seja atingida, se especificado.
Os cursores não podem ser abertos em WAITFOR instruções.
As exibições não podem ser definidas em WAITFOR instruções.
Quando a consulta excede a opção de espera de consulta, o argumento de WAITFOR instrução pode ser concluído sem ser executado. Para obter mais informações sobre a opção de configuração, consulte a configuração do servidor: espera de consulta. Para ver os processos ativos e de espera, use sp_who.
Cada WAITFOR instrução tem um thread associado a ela. Se muitas WAITFOR instruções forem especificadas no mesmo servidor, muitos threads poderão ser vinculados aguardando a execução dessas instruções. O SQL Server monitora o número de threads de instrução e seleciona aleatoriamente alguns desses threads para sair se o servidor começar a experimentar a falta de WAITFOR thread.
Você pode criar um deadlock executando uma consulta com WAITFOR uma transação que também contém bloqueios impedindo alterações no conjunto de linhas acessado pela instrução WAITFOR . O SQL Server identifica esses cenários e retorna um conjunto de resultados vazio, no caso de esse deadlock existir.
Caution
A inclusão WAITFOR retarda a conclusão do processo do SQL Server e pode resultar em uma mensagem de tempo limite no aplicativo. Se necessário, ajuste a configuração de tempo limite para a conexão em nível de aplicativo.
Examples
A. Usar WAITFOR TIME
O exemplo a seguir executa o procedimento sp_update_job armazenado no msdb banco de dados às 22h20 (22:20).
EXECUTE sp_add_job @job_name = 'TestJob';
BEGIN
WAITFOR TIME '22:20';
EXECUTE sp_update_job @job_name = 'TestJob',
@new_name = 'UpdatedJob';
END;
GO
B. Usar WAITFOR DELAY
O exemplo a seguir executa o procedimento armazenado depois de um atraso de duas horas.
BEGIN
WAITFOR DELAY '02:00';
EXECUTE sp_helpdb;
END;
GO
C. Usar WAITFOR DELAY com uma variável local
O exemplo a seguir mostra como uma variável local pode ser usada com a opção WAITFOR DELAY. Esse procedimento armazenado aguarda por um período de tempo variável e retorna informações ao usuário, tais como o número de horas, minutos e segundos decorridos.
IF OBJECT_ID('dbo.TimeDelay_hh_mm_ss','P') IS NOT NULL
DROP PROCEDURE dbo.TimeDelay_hh_mm_ss;
GO
CREATE PROCEDURE dbo.TimeDelay_hh_mm_ss (@DelayLength char(8)= '00:00:00')
AS
DECLARE @ReturnInfo VARCHAR(255)
IF ISDATE('2000-01-01 ' + @DelayLength + '.000') = 0
BEGIN
SELECT @ReturnInfo = 'Invalid time ' + @DelayLength
+ ',hh:mm:ss, submitted.';
-- This PRINT statement is for testing, not use in production.
PRINT @ReturnInfo
RETURN(1)
END
BEGIN
WAITFOR DELAY @DelayLength
SELECT @ReturnInfo = 'A total time of ' + @DelayLength + ',
hh:mm:ss, has elapsed! Your time is up.'
-- This PRINT statement is for testing, not use in production.
PRINT @ReturnInfo;
END;
GO
/* This statement executes the dbo.TimeDelay_hh_mm_ss procedure. */
EXEC TimeDelay_hh_mm_ss '00:00:10';
GO
Veja a seguir o conjunto de resultados.
A total time of 00:00:10, in hh:mm:ss, has elapsed. Your time is up.