sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server's Equivalent to Sleep():WAITFOR-utlåtandet

I SQL Server kan du använda WAITFOR uttalande för att fördröja exekveringen av en batch, lagrad procedur eller transaktion.

Det fungerar på samma sätt som MySQL:s sleep() fungera.

Egentligen är det förmodligen mer som en kombination av Postgres tre "sleep"-funktioner:pg_sleep() , pg_sleep_for() och pg_sleep_until() .

Jag säger detta eftersom SQL Servers WAITFOR uttalande ger dig möjlighet att ange antingen en tidsfördröjning eller en faktisk fast tid innan exekveringen fortsätter.

Exempel – Ange en fördröjning

För att ange en tidsfördröjning, använd DELAY argument, följt av den faktiska tiden att vänta/sova.

Fördröjningen kan vara max 24 timmar.

Här är ett exempel att visa.

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 använder DELAY alternativet formateras värdet som hh:mm[[:ss].mss].

Värdet kan anges antingen i en datetime dataformat eller som en lokal variabel. Datum kan dock inte anges, så datumdelen av datetime värde är inte tillåtet.

Exempel – Ange en tid

Alternativt kan du använda TIME argument för att ange en tidpunkt då batchen, den lagrade proceduren eller transaktionen körs.

I det här fallet är det angivna värdet den tidpunkt då WAITFOR uttalandet avslutas.

Här är ett exempel att visa.

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)

Här är några saker att tänka på när det gäller tidsvärdet som du anger:

  • Klockan kan anges i en datetime dataformat, eller så kan det anges som en lokal variabel.
  • Datum kan inte anges, så datumdelen av datetime värde är inte tillåtet.
  • Klockan är formaterad som hh:mm[[:ss].mss] och kan valfritt inkludera datumet 1900-01-01.

Den faktiska fördröjningen kan variera

Den faktiska tidsfördröjningen kan variera från den tid du anger, eftersom detta beror på saker som serverbelastning.

Tidsräknaren startar när WAITFOR uttalandetråden är schemalagd. Om servern är upptagen kanske tråden inte schemaläggs omedelbart, så tidsfördröjningen kan vara längre än den angivna tiden.

Meddelanden från servermäklare

WAITFOR uttalandet accepterar vissa argument/värden som endast är tillämpliga på Service Broker-meddelanden.

När du använder Service Broker-meddelanden kan du ange en RECEIVE uttalande eller en GET CONVERSATION GROUP uttalande, samt en TIMEOUT argument som anger tidsperioden, i millisekunder, för att vänta på att ett meddelande kommer till kön.

Se Microsofts officiella dokumentation för mer information om dessa alternativ.


  1. Förvirring med Oracle CONNECT BY

  2. Spårning av gilla-meddelanden på Facebook (DB Design)

  3. Kör MySQLDump utan att låsa tabeller

  4. Best Practices för PostgreSQL-replikering - Del 1