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.