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

SQL Server's Equivalent to Sleep():WAITFOR-erklæringen

I SQL Server kan du bruge WAITFOR erklæring for at forsinke udførelsen af ​​en batch, lagret procedure eller transaktion.

Det virker på samme måde som MySQL's sleep() fungere.

Faktisk er det nok mere som en kombination af Postgres' tre "sleep"-funktioner:pg_sleep() , pg_sleep_for() , og pg_sleep_until() .

Jeg siger dette, fordi SQL Servers WAITFOR statement giver dig mulighed for at angive enten en tidsforsinkelse eller en faktisk fast tid, før eksekveringen fortsætter.

Eksempel – Angiv en forsinkelse

For at angive en tidsforsinkelse skal du bruge DELAY argument, efterfulgt af den faktiske tid til at vente/sove.

Forsinkelsen kan maksimalt være 24 timer.

Her er et eksempel til at demonstrere.

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

Resultat:

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)

Når du bruger DELAY indstilling, er værdien formateret som tt:mm[[:ss].mss].

Værdien kan angives enten i en datetime dataformat eller som en lokal variabel. Datoer kan dog ikke angives, så datodelen af ​​datetime værdi er ikke tilladt.

Eksempel – Angiv et tidspunkt

Alternativt kan du bruge TIME argument for at angive et tidspunkt, hvor batchen, den lagrede procedure eller transaktionen kører.

I dette tilfælde er den angivne værdi det tidspunkt, hvor WAITFOR erklæring afsluttes.

Her er et eksempel til at demonstrere.

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

Resultat:

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)

Her er nogle ting, du skal huske på med hensyn til den tidsværdi, du angiver:

  • Tidspunktet kan angives i en datotid dataformat, eller det kan angives som en lokal variabel.
  • Datoer kan ikke angives, så datodelen af ​​datetime værdi er ikke tilladt.
  • Tidspunktet er formateret som tt:mm[[:ss].mss] og kan eventuelt inkludere datoen 1900-01-01.

Den faktiske forsinkelse kan variere

Den faktiske tidsforsinkelse kan variere fra det tidspunkt, du angiver, da dette vil afhænge af ting såsom serverbelastning.

Tidstælleren starter, når WAITFOR erklæringstråd er planlagt. Hvis serveren er optaget, planlægges tråden muligvis ikke med det samme, så tidsforsinkelsen kan være længere end den angivne tid.

Server Broker Beskeder

WAITFOR sætningen accepterer nogle argumenter/værdier, der kun gælder for Service Broker-meddelelser.

Når du bruger Service Broker-meddelelser, kan du angive en RECEIVE sætning eller en GET CONVERSATION GROUP sætning, samt en TIMEOUT argument, der angiver tidsperioden, i millisekunder, der skal vente på, at en besked ankommer i køen.

Se Microsofts officielle dokumentation for mere information om disse muligheder.


  1. Hvordan sammenligner man softwareversioner ved hjælp af SQL Server?

  2. PHP MYSQL OPDATERING hvis Exist eller INSERT hvis ikke?

  3. Oracle:Importer CSV-fil

  4. SQLite-undtagelse under forsøg på at slette række