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 DATETIME
valeur. 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'
).DATETIME
que 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 TIME
vs DELAY
:
Avez-vous déjà remarqué que si vous dépassez accidentellement WAITFOR TIME
une 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 DELAY
fera la même chose si vous lui passez une DATETIME
valeur 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 DELAY
sur 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' WAITFOR
instruction.