Làm thế nào để gây ra sự chậm trễ trong việc thực hiện trong một số giây được chỉ định?
Điều này không làm điều đó:
WAITFOR DELAY '00:02';
Định dạng đúng là gì?
Làm thế nào để gây ra sự chậm trễ trong việc thực hiện trong một số giây được chỉ định?
Điều này không làm điều đó:
WAITFOR DELAY '00:02';
Định dạng đúng là gì?
Câu trả lời:
Tài liệu cho WAITFOR()
không trình bày rõ ràng định dạng chuỗi yêu cầu.
Điều này sẽ đợi trong 2 giây:
WAITFOR DELAY '00:00:02';
Các định dạng là hh:mi:ss.mmm
.
Như đã đề cập trong các câu trả lời khác, tất cả những điều sau đây sẽ hoạt động cho cú pháp dựa trên chuỗi tiêu chuẩn.
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
Ngoài ra còn có một phương pháp khác để truyền cho nó một DATETIME
giá trị. Bạn có thể nghĩ rằng tôi nhầm lẫn điều này với WAITFOR TIME
, nhưng nó cũng hoạt động cho WAITFOR DELAY
.
Cân nhắc để vượt qua DATETIME
:
'1900-01-01'
).DATETIME
so với định dạng đúng a VARCHAR
.Cách đợi trong 2 giây:
--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
Một lưu ý về việc chờ đợi TIME
vs DELAY
:
Bạn có bao giờ nhận thấy rằng nếu bạn vô tình vượt qua WAITFOR TIME
một ngày đã trôi qua, thậm chí chỉ một giây, nó sẽ không bao giờ quay trở lại? Kiểm tra xem nó:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
Thật không may, WAITFOR DELAY
sẽ làm điều tương tự nếu bạn vượt qua nó một DATETIME
giá trị âm (vâng, đó là một điều).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
Tuy nhiên, tôi vẫn khuyên bạn nên sử dụng WAITFOR DELAY
trong một khoảng thời gian tĩnh bởi vì bạn luôn có thể xác nhận độ trễ của bạn là tích cực và nó sẽ giữ nguyên như vậy trong bao lâu, mã của bạn sẽ đạt được WAITFOR
tuyên bố.