In SQL Server puoi usare WAITFOR
istruzione per ritardare l'esecuzione di un batch, una procedura memorizzata o una transazione.
Funziona in modo simile a sleep()
di MySQL funzione.
In realtà, è probabilmente più simile a una combinazione delle tre funzioni "sleep" di Postgres:pg_sleep()
, pg_sleep_for()
e pg_sleep_until()
.
Dico questo, perché WAITFOR
di SQL Server istruzione ti dà la possibilità di specificare un ritardo o un tempo fisso effettivo prima che l'esecuzione continui.
Esempio:specifica un ritardo
Per specificare un ritardo, usa il DELAY
argomento, seguito dal tempo effettivo di attesa/sonno.
Il ritardo può essere al massimo di 24 ore.
Ecco un esempio da dimostrare.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Risultato:
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)
Quando si utilizza il DELAY
opzione, il valore è formattato come hh:mm[[:ss].mss].
Il valore può essere specificato in un datetime formato dati o come variabile locale. Tuttavia, le date non possono essere specificate, quindi la data fa parte di datetime valore non è consentito.
Esempio:specifica un'ora
In alternativa, puoi utilizzare il TIME
argomento per specificare l'ora di esecuzione del batch, della procedura memorizzata o della transazione.
In questo caso, il valore fornito è l'ora in cui il WAITFOR
la dichiarazione finisce.
Ecco un esempio da dimostrare.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Risultato:
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)
Ecco alcune cose da tenere a mente riguardo al valore del tempo che fornisci:
- L'ora può essere specificata in un datetime formato dati oppure può essere specificato come variabile locale.
- Le date non possono essere specificate, quindi la data fa parte di datetime il valore non è consentito.
- L'ora è formattata come hh:mm[[:ss].mss] e può includere facoltativamente la data del 01-01-1900.
Il ritardo effettivo può variare
Il ritardo di tempo effettivo può variare dall'ora specificata, poiché dipende da cose come il carico del server.
Il contatore del tempo inizia quando il WAITFOR
il thread di istruzioni è programmato. Se il server è occupato, il thread potrebbe non essere pianificato immediatamente, quindi il ritardo potrebbe essere più lungo del tempo specificato.
Messaggi del broker di server
Il WAITFOR
accetta alcuni argomenti/valori applicabili solo ai messaggi di Service Broker.
Quando utilizzi i messaggi di Service Broker puoi fornire un RECEIVE
o un GET CONVERSATION GROUP
dichiarazione, nonché un TIMEOUT
argomento che specifica il periodo di tempo, in millisecondi, per attendere l'arrivo di un messaggio in coda.
Consulta la documentazione ufficiale di Microsoft per ulteriori informazioni su queste opzioni.