Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server’s Tương đương với Sleep ():Câu lệnh WAITFOR

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()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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hành vi @@ rowcount không mong muốn bên trong UDF trong MS SQL 2019

  2. SQL động so với thủ tục được lưu trữ

  3. tách chữ và số bằng sql

  4. Cách sử dụng thuộc tính IDENTITY () trong SQL Server

  5. DATEDIFF () Trả về Kết quả Sai trong SQL Server? Đọc này.