In SQL Server können Sie den WAITFOR
verwenden -Anweisung, um die Ausführung eines Stapels, einer gespeicherten Prozedur oder einer Transaktion zu verzögern.
Es funktioniert ähnlich wie sleep()
von MySQL Funktion.
Eigentlich ist es wahrscheinlich eher eine Kombination der drei „Sleep“-Funktionen von Postgres:pg_sleep()
, pg_sleep_for()
und pg_sleep_until()
.
Ich sage das, weil WAITFOR
von SQL Server -Anweisung gibt Ihnen die Möglichkeit, entweder eine Zeitverzögerung oder eine tatsächliche feste Zeit anzugeben, bevor die Ausführung fortgesetzt wird.
Beispiel – Geben Sie eine Verzögerung an
Um eine Zeitverzögerung anzugeben, verwenden Sie den DELAY
Argument, gefolgt von der tatsächlichen Zeit zum Warten/Schlafen.
Die Verzögerung kann maximal 24 Stunden betragen.
Hier ist ein Beispiel zur Veranschaulichung.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Ergebnis:
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)
Bei Verwendung des DELAY
Option wird der Wert als hh:mm[[:ss].mss].
Der Wert kann entweder in einem datetime angegeben werden Datenformat oder als lokale Variable. Allerdings können keine Daten angegeben werden, also der Datumsteil von datetime Wert ist nicht zulässig.
Beispiel – Geben Sie eine Zeit an
Alternativ können Sie auch den TIME
verwenden Argument, um eine Zeit anzugeben, zu der der Stapel, die gespeicherte Prozedur oder die Transaktion ausgeführt wird.
In diesem Fall ist der bereitgestellte Wert der Zeitpunkt, zu dem das WAITFOR
Anweisung endet.
Hier ist ein Beispiel zur Veranschaulichung.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Ergebnis:
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 sind einige Dinge, die Sie in Bezug auf den von Ihnen bereitgestellten Zeitwert beachten sollten:
- Die Uhrzeit kann in einem datetime angegeben werden Datenformat oder kann als lokale Variable angegeben werden.
- Datum kann nicht angegeben werden, also der Datumsteil von datetime Wert ist nicht erlaubt.
- Die Uhrzeit ist im Format hh:mm[[:ss].mss] und kann optional das Datum 1900-01-01 enthalten.
Die tatsächliche Verzögerung kann variieren
Die tatsächliche Zeitverzögerung kann von der von Ihnen angegebenen Zeit abweichen, da dies von Dingen wie der Serverlast abhängt.
Der Zeitzähler beginnt mit dem WAITFOR
Anweisungsthread ist geplant. Wenn der Server ausgelastet ist, wird der Thread möglicherweise nicht sofort geplant, sodass die Zeitverzögerung länger als die angegebene Zeit sein kann.
Server-Broker-Meldungen
Das WAITFOR
-Anweisung akzeptiert einige Argumente/Werte, die nur für Service Broker-Nachrichten gelten.
Bei der Verwendung von Service Broker-Nachrichten können Sie einen RECEIVE
angeben -Anweisung oder eine GET CONVERSATION GROUP
-Anweisung sowie ein TIMEOUT
Argument, das den Zeitraum in Millisekunden angibt, der auf das Eintreffen einer Nachricht in der Warteschlange gewartet werden soll.
Weitere Informationen zu diesen Optionen finden Sie in der offiziellen Dokumentation von Microsoft.