WAITFOR DELAY 'HH:MM:SS'
Tôi tin rằng thời gian tối đa này có thể chờ là 23 giờ, 59 phút và 59 giây.
Đây là một hàm có giá trị vô hướng để hiển thị việc sử dụng nó; hàm dưới đây sẽ lấy tham số nguyên là giây, sau đó nó chuyển thành HH: MM: SS và thực thi nó bằng EXEC sp_executesql @sqlcode
lệnh để truy vấn. Hàm dưới đây chỉ dành cho trình diễn, tôi biết nó không phù hợp với mục đích thực sự là hàm có giá trị vô hướng! :-)
CREATE FUNCTION [dbo].[ufn_DelayFor_MaxTimeIs24Hours]
(
@sec int
)
RETURNS
nvarchar(4)
AS
BEGIN
declare @hours int = @sec / 60 / 60
declare @mins int = (@sec / 60) - (@hours * 60)
declare @secs int = (@sec - ((@hours * 60) * 60)) - (@mins * 60)
IF @hours > 23
BEGIN
select @hours = 23
select @mins = 59
select @secs = 59
-- 'maximum wait time is 23 hours, 59 minutes and 59 seconds.'
END
declare @sql nvarchar(24) = 'WAITFOR DELAY '+char(39)+cast(@hours as nvarchar(2))+':'+CAST(@mins as nvarchar(2))+':'+CAST(@secs as nvarchar(2))+char(39)
exec sp_executesql @sql
return ''
END
NẾU bạn muốn trì hoãn lâu hơn 24 giờ, tôi khuyên bạn nên sử dụng tham số @Days để đi trong một số ngày và bọc chức năng thực thi bên trong một vòng lặp ... ví dụ:
Declare @Days int = 5
Declare @CurrentDay int = 1
WHILE @CurrentDay <= @Days
BEGIN
--24 hours, function will run for 23 hours, 59 minutes, 59 seconds per run.
[ufn_DelayFor_MaxTimeIs24Hours] 86400
SELECT @CurrentDay = @CurrentDay + 1
END