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 ?
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 ?
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
.
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
:
'1900-01-01'
).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.
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.
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 ?