Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Äquivalent zu Sleep():Die WAITFOR-Anweisung

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].

formatiert

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.