T-SQL中的Sleep命令?

11 浏览
0 Comments

T-SQL中的Sleep命令?

有没有一种方式能够编写一个 T-SQL 命令来使其仅仅休眠一段时间?我正在异步地写一个 Web 服务,我想能够运行一些测试,以查看异步模式是否真的能使其更具可扩展性。为了“模拟”一个缓慢的外部服务,我想能够使用一个运行缓慢但实际上并未处理大量东西的 SQL 服务器脚本进行调用。

admin 更改状态以发布 2023年5月22日
0
0 Comments

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

0
0 Comments

看看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'可能根本不会等待

0