Как вызвать задержку выполнения на указанное количество секунд?
Это не делает это:
WAITFOR DELAY '00:02';
Какой правильный формат?
Как вызвать задержку выполнения на указанное количество секунд?
Это не делает это:
WAITFOR DELAY '00:02';
Какой правильный формат?
Ответы:
В документацииWAITFOR() явно не указан требуемый формат строки.
Это будет ждать 2 секунды:
WAITFOR DELAY '00:00:02';
Формат есть hh:mi:ss.mmm.
Как уже упоминалось в других ответах, все следующее будет работать для стандартного синтаксиса на основе строк.
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
Существует также альтернативный метод передачи ему DATETIMEзначения. Вы можете подумать, что я путаю это с WAITFOR TIME, но это тоже работает WAITFOR DELAY.
Соображения для прохождения DATETIME:
'1900-01-01').DATETIMEчем правильно форматировать a VARCHAR.Как ждать 2 секунды:
--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
Примечание о ожидании TIMEпротив DELAY:
Вы когда-нибудь замечали, что если вы случайно пройдете WAITFOR TIMEдату, которая уже прошла, хотя бы на секунду, она никогда не вернется? Проверьте это:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
К сожалению, WAITFOR DELAYбудет делать то же самое, если вы передадите ему отрицательное DATETIMEзначение (да, это вещь).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
Тем не менее, я бы по-прежнему рекомендовал использовать в WAITFOR DELAYтечение статического времени, потому что вы всегда можете подтвердить, что ваша задержка положительна, и она останется такой, сколько бы времени ни потребовалось вашему коду, чтобы достичь WAITFORутверждения.