2011-10-06 25 views
126

Làm cách nào để trì hoãn thực hiện trong một số giây được chỉ định?Cách đợi 2 giây

này không làm điều đó:

WAITFOR DELAY '00:02'; 

Ai đó có thể giúp tôi với các định dạng?

+0

Chủ đề dường như chờ đợi lâu hơn 2 giây. Tôi nhận ra rằng có thể mất hơn 2 giây để chuỗi tiếp tục, nhưng mất khoảng 1 phút khi chạy trên một db cục bộ mà tôi đang sử dụng và không có hoạt động nào khác. – ChadD

+0

Điều này sẽ thực sự chờ đợi chính xác 2 phút. –

+2

bản sao có thể có của [Lệnh Ngủ trong T-SQL?] (Http://stackoverflow.com/questions/664902/sleep-command-in-t-sql) – Jesse

Trả lời

241

The documentation for WAITFOR() không trình bày rõ ràng định dạng chuỗi bắt buộc.

này sẽ đợi 2 giây:

WAITFOR DELAY '00:00:02'; 

Định dạng là hh:mi:ss.mmm.

17

Làm thế nào về điều này?

WAITFOR DELAY '00:00:02'; 

Nếu bạn có "00:02", nó diễn giải là Giờ: Phút.

48

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 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ó phương pháp thay thế giá trị DATETIME. Bạn có thể nghĩ rằng tôi đang 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 cho đi DATETIME:

  • Nó phải được thông qua như là một biến, vì vậy nó không phải là một đẹp một lót nữa.
  • Độ trễ được tính là thời gian kể từ thời Đại Kỷ Nguyên ('1900-01-01').
  • Đối với các trường hợp yêu cầu độ trễ thay đổi, việc thao tác DATETIME dễ dàng hơn nhiều để định dạng đúng VARCHAR.

Làm thế nào để chờ 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 

Lưu ý về chờ đợi TIME vs DELAY:

Bạn đã 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, ngay cả chỉ một giây, nó sẽ không bao giờ trở lại? Check it out:

--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 giá trị âm DATETIME (có, đó 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 sẽ khuyên bạn sử dụng WAITFOR DELAY trong một thời gian tĩnh bởi vì bạn luôn có thể xác nhận chậm trễ của bạn là tích cực và nó sẽ ở lại như vậy cho lâu dài tuy nhiên phải mất mã của bạn để đạt được tuyên bố WAITFOR.

Các vấn đề liên quan