Comment peut-on retarder l'exécution d'un nombre de secondes spécifié?
Cela ne le fait pas:
WAITFOR DELAY '00:02';
Quel est le format correct?
Comment peut-on retarder l'exécution d'un nombre de secondes spécifié?
Cela ne le fait pas:
WAITFOR DELAY '00:02';
Quel est le format correct?
Réponses:
La documentation deWAITFOR() ne présente pas explicitement le format de chaîne requis.
Cela attendra 2 secondes:
WAITFOR DELAY '00:00:02';
Le format est hh:mi:ss.mmm.
Comme mentionné dans d'autres réponses, tous les éléments suivants fonctionneront pour la syntaxe standard basée sur des chaînes.
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 pour lui transmettre une DATETIMEvaleur. Vous pensez peut-être que je confond cela avec WAITFOR TIME, mais cela fonctionne aussi pour WAITFOR DELAY.
Considérations pour réussir DATETIME:
'1900-01-01').DATETIMEque de formater correctement a 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 TIMEvs DELAY:
Avez-vous déjà remarqué que si vous dépassez accidentellement WAITFOR TIMEune date déjà passée, ne serait-ce que d'une seconde, elle ne reviendra jamais? Vérifiez-le:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
Malheureusement, WAITFOR DELAYfera la même chose si vous lui passez une DATETIMEvaleur négative (oui, c'est une chose).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
Cependant, je recommanderais toujours d'utiliser WAITFOR DELAYsur un temps statique car vous pouvez toujours confirmer que votre retard est positif et qu'il le restera aussi longtemps qu'il faudra à votre code pour atteindre l' WAITFORinstruction.