sql >> Database >  >> RDS >> Sqlserver

Equivalent van SQL Server aan Sleep():de WAITFOR-instructie

In SQL Server kunt u de WAITFOR . gebruiken verklaring om de uitvoering van een batch, opgeslagen procedure of transactie uit te stellen.

Het werkt vergelijkbaar met MySQL's sleep() functie.

Eigenlijk is het waarschijnlijk meer een combinatie van de drie "slaap"-functies van Postgres:pg_sleep() , pg_sleep_for() , en pg_sleep_until() .

Ik zeg dit omdat WAITFOR . van SQL Server statement geeft u de mogelijkheid om ofwel een vertraging op te geven, ofwel een werkelijke vaste tijd voordat de uitvoering doorgaat.

Voorbeeld – Specificeer een vertraging

Gebruik de DELAY . om een ​​vertraging op te geven argument, gevolgd door de werkelijke tijd om te wachten/slapen.

De vertraging kan maximaal 24 uur zijn.

Hier is een voorbeeld om te demonstreren.

SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];

Resultaat:

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)

Bij gebruik van de DELAY optie, wordt de waarde opgemaakt als uu:mm[[:ss].mss].

De waarde kan worden opgegeven in een datetime gegevensformaat, of als een lokale variabele. Datums kunnen echter niet worden opgegeven, dus het datumgedeelte van de datetime waarde is niet toegestaan.

Voorbeeld – Specificeer een Tijd

U kunt ook de TIME . gebruiken argument om een ​​tijd op te geven waarop de batch, opgeslagen procedure of transactie wordt uitgevoerd.

In dit geval is de opgegeven waarde het tijdstip waarop de WAITFOR verklaring is afgelopen.

Hier is een voorbeeld om te demonstreren.

SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];

Resultaat:

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)

Hier zijn enkele dingen om in gedachten te houden met betrekking tot de tijdswaarde die u opgeeft:

  • De tijd kan worden opgegeven in een datetime gegevensformaat, of het kan worden opgegeven als een lokale variabele.
  • Datums kunnen niet worden opgegeven, dus het datumgedeelte van de datetime waarde is niet toegestaan.
  • De tijd is opgemaakt als uu:mm[[:ss].mss] en kan optioneel de datum 1900-01-01 bevatten.

De werkelijke vertraging kan variëren

De werkelijke vertraging kan afwijken van de tijd die u opgeeft, omdat dit afhankelijk is van zaken als serverbelasting.

De tijdteller begint wanneer de WAITFOR statement thread is gepland. Als de server bezet is, wordt de thread mogelijk niet onmiddellijk gepland, dus de vertraging kan langer zijn dan de opgegeven tijd.

Server Broker-berichten

De WAITFOR statement accepteert enkele argumenten/waarden die alleen van toepassing zijn op Service Broker-berichten.

Wanneer u Service Broker-berichten gebruikt, kunt u een RECEIVE statement of een GET CONVERSATION GROUP statement, evenals een TIMEOUT argument dat de tijdsduur specificeert, in milliseconden, om te wachten tot een bericht in de wachtrij arriveert.

Zie de officiële documentatie van Microsoft voor meer informatie over deze opties.


  1. Hoe kan ik alle rijen opvragen binnen een straal van 5 mijl van mijn coördinaten?

  2. Waarom beginnen tabelnamen in SQL Server met dbo?

  3. Door komma's gescheiden waarden met SQL Query

  4. SQL-ontwikkelaar 4