Trong SQL Server, bạn có thể sử dụng WAITFOR
tuyên bố để trì hoãn việc thực hiện một lô, thủ tục được lưu trữ hoặc giao dịch.
Nó hoạt động tương tự như sleep()
của MySQL hàm số.
Trên thực tế, nó có thể giống sự kết hợp của ba hàm “ngủ” của Postgres:pg_sleep()
, pg_sleep_for()
và pg_sleep_until()
.
Tôi nói điều này, bởi vì WAITFOR
của SQL Server câu lệnh cung cấp cho bạn tùy chọn chỉ định thời gian trễ hoặc thời gian cố định thực tế trước khi tiếp tục thực thi.
Ví dụ - Chỉ định độ trễ
Để chỉ định thời gian trễ, hãy sử dụng DELAY
đối số, theo sau là thời gian thực tế để chờ / ngủ.
Thời gian trễ có thể tối đa là 24 giờ.
Đây là một ví dụ để chứng minh.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR DELAY '00:00:10';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Kết quả:
Time: 11.137s (11 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 00:02:30.963 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 00:02:41.610 | +-------------------------+ (1 row affected)
Khi sử dụng DELAY
tùy chọn, giá trị được định dạng là hh:mm [[:ss] .mss].
Giá trị có thể được chỉ định trong ngày giờ định dạng dữ liệu hoặc như một biến cục bộ. Tuy nhiên, không thể chỉ định ngày, do đó, phần ngày của datetime giá trị không được phép.
Ví dụ - Chỉ định thời gian
Ngoài ra, bạn có thể sử dụng TIME
đối số để chỉ định thời gian khi lô, thủ tục được lưu trữ hoặc giao dịch chạy.
Trong trường hợp này, giá trị được cung cấp là thời gian tại đó WAITFOR
câu lệnh kết thúc.
Đây là một ví dụ để chứng minh.
SELECT CURRENT_TIMESTAMP AS [First Timestamp];
WAITFOR TIME '04:33:30';
SELECT CURRENT_TIMESTAMP AS [Second Timestamp];
Kết quả:
Time: 39.487s (39 seconds) +-------------------------+ | First Timestamp | |-------------------------| | 2020-06-29 04:32:51.183 | +-------------------------+ (1 row affected) Commands completed successfully. +-------------------------+ | Second Timestamp | |-------------------------| | 2020-06-29 04:33:30.160 | +-------------------------+ (1 row affected)
Dưới đây là một số điều cần ghi nhớ về giá trị thời gian mà bạn cung cấp:
- Thời gian có thể được chỉ định trong ngày giờ định dạng dữ liệu, hoặc nó có thể được chỉ định như một biến cục bộ.
- Không thể chỉ định ngày, vì vậy phần ngày của datetime giá trị không được phép.
- Thời gian được định dạng là hh:mm [[:ss] .mss] và có thể tùy chọn bao gồm ngày 1900-01-01.
Độ trễ thực tế có thể thay đổi
Thời gian trễ thực tế có thể thay đổi so với thời gian bạn chỉ định, vì điều này sẽ phụ thuộc vào những thứ chẳng hạn như tải của máy chủ.
Bộ đếm thời gian bắt đầu khi WAITFOR
chuỗi câu lệnh được lên lịch. Nếu máy chủ bận, luồng có thể không được lên lịch ngay lập tức, do đó, thời gian trễ có thể lâu hơn thời gian đã chỉ định.
Thông báo của nhà môi giới máy chủ
WAITFOR
câu lệnh chấp nhận một số đối số / giá trị chỉ áp dụng cho các thông báo của Service Broker.
Khi sử dụng tin nhắn của Service Broker, bạn có thể cung cấp RECEIVE
câu lệnh hoặc GET CONVERSATION GROUP
câu lệnh cũng như TIMEOUT
đối số chỉ định khoảng thời gian, tính bằng mili giây, để đợi một thông báo đến trong hàng đợi.
Xem tài liệu chính thức của Microsoft để biết thêm thông tin về các tùy chọn này.