T-SQL中的Sleep命令?
T-SQL中的Sleep命令?
有没有一种方式能够编写一个 T-SQL 命令来使其仅仅休眠一段时间?我正在异步地写一个 Web 服务,我想能够运行一些测试,以查看异步模式是否真的能使其更具可扩展性。为了“模拟”一个缓慢的外部服务,我想能够使用一个运行缓慢但实际上并未处理大量东西的 SQL 服务器脚本进行调用。
admin 更改状态以发布 2023年5月22日
WAITFOR DELAY 'HH:MM:SS'
我相信这个等待的最长时间是23小时59分59秒。
这是一个标量值函数来展示它的使用; 下面的函数将接受一个整数参数来表示秒数,然后将其翻译成HH:MM:SS,并使用EXEC sp_executesql @sqlcode
命令来查询。下面的函数仅供演示,我知道它不够适合作为标量值函数! 🙂
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
如果你希望延迟时间超过24小时,建议你使用一个@Days参数来设定延迟的天数,并将函数可执行体置于循环内...例如:
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
看看WAITFOR命令。
例如:
-- wait for 1 minute WAITFOR DELAY '00:01' -- wait for 1 second WAITFOR DELAY '00:00:01'
此命令允许您高度的精度,但在典型机器上仅在10毫秒至16毫秒之间精度准确,因为它依赖于GetTickCount。因此,例如呼叫WAITFOR DELAY '00:00:00:001'
可能根本不会等待
。