Як можна викликати затримку виконання на певну кількість секунд?
Це не робить:
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
заяви.