Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Équivalent de SQL Server à Sleep() :l'instruction WAITFOR

Dans SQL Server, vous pouvez utiliser le WAITFOR pour retarder l'exécution d'un lot, d'une procédure stockée ou d'une transaction.

Cela fonctionne de la même manière que sleep() de MySQL une fonction.

En fait, c'est probablement plus comme une combinaison des trois fonctions "sleep" de Postgres :pg_sleep() , pg_sleep_for() , et pg_sleep_until() .

Je dis cela, car le WAITFOR de SQL Server vous donne la possibilité de spécifier soit un délai, soit un temps fixe réel avant que l'exécution ne se poursuive.

Exemple – Spécifier un délai

Pour spécifier un délai, utilisez le DELAY argument, suivi du temps réel d'attente/de sommeil.

Le délai peut être de 24 heures maximum.

Voici un exemple pour illustrer.

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

Résultat :

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)

Lors de l'utilisation du DELAY , la valeur est au format hh:mm[[:ss].mss].

La valeur peut être spécifiée soit dans un datetime format de données ou en tant que variable locale. Cependant, les dates ne peuvent pas être spécifiées, donc la partie date de datetime la valeur n'est pas autorisée.

Exemple – Spécifier une heure

Alternativement, vous pouvez utiliser le TIME argument pour spécifier une heure à laquelle le lot, la procédure stockée ou la transaction s'exécute.

Dans ce cas, la valeur fournie est l'heure à laquelle le WAITFOR l'instruction se termine.

Voici un exemple pour illustrer.

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

Résultat :

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)

Voici quelques éléments à garder à l'esprit concernant la valeur temporelle que vous fournissez :

  • L'heure peut être spécifiée dans un datetime format de données, ou il peut être spécifié en tant que variable locale.
  • Les dates ne peuvent pas être spécifiées, donc la partie date de datetime la valeur n'est pas autorisée.
  • L'heure est au format hh:mm[[:ss].mss] et peut éventuellement inclure la date du 1900-01-01.

Le délai réel peut varier

Le délai réel peut varier de l'heure que vous spécifiez, car cela dépendra de facteurs tels que la charge du serveur.

Le compteur de temps démarre lorsque le WAITFOR le fil d'instructions est planifié. Si le serveur est occupé, le fil peut ne pas être planifié immédiatement, de sorte que le délai peut être plus long que l'heure spécifiée.

Messages du courtier de serveur

Le WAITFOR accepte certains arguments/valeurs qui ne s'appliquent qu'aux messages Service Broker.

Lorsque vous utilisez des messages Service Broker, vous pouvez fournir un RECEIVE ou une instruction GET CONVERSATION GROUP déclaration, ainsi qu'un TIMEOUT argument qui spécifie la durée, en millisecondes, d'attente pour qu'un message arrive dans la file d'attente.

Consultez la documentation officielle de Microsoft pour plus d'informations sur ces options.