214 votes

Comment attendre 2 secondes ?

Comment provoquer un retard d'exécution pendant un nombre de secondes déterminé ?

Ça ne le fait pas :

WAITFOR DELAY '00:02';

Quel est le format correct ?

1 votes

Le fil de discussion semble attendre beaucoup plus longtemps que 2 secondes. Je me rends compte qu'il peut prendre plus de 2 secondes pour que le fil continue, mais il prend environ 1 minute lorsqu'il fonctionne sur une base de données locale que je suis le seul à utiliser et qu'il n'y a aucune autre activité en cours.

1 votes

Cela va attendre exactement 2 minutes.

3 votes

Duplicata possible de Commande Sleep en T-SQL ?

411voto

Nick Chammas Points 946

La documentation pour WAITFOR() ne définit pas explicitement le format de chaîne requis.

Cela attendra 2 secondes :

WAITFOR DELAY '00:00:02';

Le format est le suivant hh:mi:ss.mmm .

134voto

SurroundedByFish Points 532

Comme mentionné dans d'autres réponses, toutes les méthodes suivantes fonctionnent pour la syntaxe standard basée sur les chaînes de caractères.

WAITFOR DELAY '02:00' --Two hours
WAITFOR DELAY '00:02' --Two minutes
WAITFOR DELAY '00:00:02' --Two seconds
WAITFOR DELAY '00:00:00.200' --Two tenths of a seconds

Il existe également une méthode alternative qui consiste à lui faire passer une DATETIME valeur. Vous pourriez penser que je confonds avec WAITFOR TIME mais il fonctionne également pour WAITFOR DELAY .

Considérations sur le passage DATETIME :

  • Il doit être passé en tant que variable, donc ce n'est plus un joli one-liner.
  • Le délai est mesuré comme le temps écoulé depuis que l'époque ( '1900-01-01' ).
  • Pour les situations qui nécessitent un délai variable, il est beaucoup plus facile de manipuler une DATETIME que de formater correctement un VARCHAR .

Comment attendre 2 secondes :

--Example 1
DECLARE @Delay1 DATETIME
SELECT @Delay1 = '1900-01-01 00:00:02.000'
WAITFOR DELAY @Delay1

--Example 2
DECLARE @Delay2 DATETIME
SELECT @Delay2 = dateadd(SECOND, 2, convert(DATETIME, 0))
WAITFOR DELAY @Delay2

Une note sur l'attente de TIME vs DELAY :

Avez-vous déjà remarqué que si vous passez accidentellement WAITFOR TIME une date qui est déjà passée, même d'une seule seconde, elle ne reviendra jamais ? Regardez ça :

--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER

Malheureusement, WAITFOR DELAY fera la même chose si vous lui passez un négatif DATETIME (oui, ça existe).

--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER

Cependant, je recommande toujours d'utiliser WAITFOR DELAY sur un temps statique, car vous pouvez toujours confirmer que votre délai est positif et qu'il le restera aussi longtemps que votre code mettra du temps à atteindre l'objectif de l'UE. WAITFOR déclaration.

29voto

JohnD Points 6811

Que pensez-vous de ça ?

WAITFOR DELAY '00:00:02';

Si vous avez "00:02", il l'interprète comme Heures:Minutes.

2voto

john m Points 21

Essayez cet exemple :

exec DBMS_LOCK.sleep(5);

C'est l'ensemble du script :

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Start Date / Time" FROM DUAL;

exec DBMS_LOCK.sleep(5);

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "End Date / Time" FROM DUAL;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X