当前位置:  开发笔记 > 数据库 > 正文

T-SQL中的睡眠命令?

如何解决《T-SQL中的睡眠命令?》经验,为你挑选了2个好方法。

有没有办法写一个T-SQL命令让它睡一段时间?我正在异步编写Web服务,我希望能够运行一些测试,看看异步模式是否真的会使它更具可伸缩性.为了"模拟"一个缓慢的外部服务,我希望能够使用运行缓慢的脚本调用SQL服务器,但实际上并没有处理大量的东西.



1> Sam Saffron..:

看看WAITFOR命令

例如.

-- wait for 1 minute
WAITFOR DELAY '00:01'

-- wait for 1 second
WAITFOR DELAY '00:00:01'

此命令允许您高度精确,但在典型计算机上仅在10ms - 16ms内准确,因为它依赖于GetTickCount.因此,例如,呼叫WAITFOR DELAY '00:00:00:001'可能导致完全没有等待.


有人知道如何从函数中使用它吗?我得到(正确的可能),但为了测试我想覆盖)'在函数内无效使用副作用运算符'WAITFOR'....
@monojohnny让SVF等待,我在下面尝试了Josh的回答,但是没有用。相反,我只是像这样创建一个WHILE循环:`CREATE FUNCTION [dbo]。[ForcedTimeout](@ seconds int)返回int作为BEGIN DECLARE @endTime datetime2(0)= DATEADD(SECOND,@seconds,GETDATE()); WHILE(GETDATE()<@endTime)开始设置@endTime = @endTime; -什么也不做,但是SQL需要一条语句。结束`
确保您使用3位数字表示毫秒-“ 00:00:00:01”不等于“ 00:00:00:010”,请使用第二个数字。(在MSSQL 2016上测试)

2> Josh Harris..:
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

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有