Làm thế nào để chờ trong 2 giây?


184

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ác 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 để luồng 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.
Chad

1
Điều này thực sự sẽ chờ chính xác 2 phút.
Nick Chammas

2
có thể trùng lặp lệnh ngủ trong T-SQL?
Jesse

Câu trả lời:



98

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 DATETIMEgiá 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:

  • Nó phải được truyền dưới dạng một biến, vì vậy nó không còn là một lớp lót đẹp nữa.
  • Độ trễ được đo bằng thời gian kể từ Kỷ nguyên ( '1900-01-01').
  • Đối với các tình huống yêu cầu độ trễ thay đổi, việc thao tác a dễ dàng hơn nhiều DATETIMEso 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 TIMEvs DELAY:

Bạn có bao giờ nhận thấy rằng nếu bạn vô tình vượt qua WAITFOR TIMEmộ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 DELAYsẽ làm điều tương tự nếu bạn vượt qua nó một DATETIMEgiá 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 DELAYtrong 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 WAITFORtuyên bố.


25

Còn cái này thì sao?

WAITFOR DELAY '00:00:02';

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


2

Hãy thử ví dụ này:

exec DBMS_LOCK.sleep(5);

Đây là toàn bộ kịch bản:

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Start Date / Time" FROM DUAL;

exec DBMS_LOCK.sleep(5);

SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "End Date / Time" FROM DUAL;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.