No SQL Server, você pode usar o
WAITFOR instrução para atrasar a execução de um lote, procedimento armazenado ou transação. Funciona de forma semelhante ao
sleep() do MySQL função. Na verdade, provavelmente é mais como uma combinação das três funções “sleep” do Postgres:
pg_sleep() , pg_sleep_for() e pg_sleep_until() . Digo isso porque o
WAITFOR do SQL Server A instrução oferece a opção de especificar um atraso de tempo ou um tempo fixo real antes que a execução continue. Exemplo – Especificar um atraso
Para especificar um atraso de tempo, use o
DELAY argumento, seguido pelo tempo real para esperar/dormir. O atraso pode ser de no máximo 24 horas.
Aqui está um exemplo para demonstrar.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp]; Resultado:
Time: 11.137s (11 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 00:02:30.963 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 00:02:41.610 | +-------------------------+ (1 row affected)
Ao usar o
DELAY opção, o valor é formatado como hh:mm[[:ss].mss]. O valor pode ser especificado em um datetime formato de dados ou como uma variável local. No entanto, as datas não podem ser especificadas, portanto, a data faz parte do datetime valor não é permitido.
Exemplo - Especificar um horário
Alternativamente, você pode usar o
TIME argumento para especificar uma hora em que o lote, procedimento armazenado ou transação é executado. Neste caso, o valor fornecido é a hora em que o
WAITFOR declaração termina. Aqui está um exemplo para demonstrar.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp]; Resultado:
Time: 39.487s (39 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 04:32:51.183 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 04:33:30.160 | +-------------------------+ (1 row affected)
Aqui estão algumas coisas a serem lembradas em relação ao valor de tempo que você fornece:
- A hora pode ser especificada em um datetime formato de dados, ou pode ser especificado como uma variável local.
- As datas não podem ser especificadas, então a data faz parte do datetime valor não é permitido.
- A hora é formatada como hh:mm[[:ss].mss] e pode incluir opcionalmente a data de 1900-01-01.
O atraso real pode variar
O atraso de tempo real pode variar do horário especificado, pois isso dependerá de coisas como a carga do servidor.
O contador de tempo inicia quando o
WAITFOR thread de instrução está agendado. Se o servidor estiver ocupado, o encadeamento pode não ser agendado imediatamente, portanto, o atraso pode ser maior que o tempo especificado. Mensagens do agente do servidor
O
WAITFOR A instrução aceita alguns argumentos/valores que são aplicáveis apenas a mensagens do Service Broker. Ao usar mensagens do Service Broker, você pode fornecer um
RECEIVE instrução ou um GET CONVERSATION GROUP instrução, bem como um TIMEOUT argumento que especifica o período de tempo, em milissegundos, para aguardar a chegada de uma mensagem na fila. Consulte a documentação oficial da Microsoft para obter mais informações sobre essas opções.