Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Equivalente a Sleep() di SQL Server:l'istruzione WAITFOR

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.