实现秒级作业的示例(使用WAITFOR).sql

USE tempdb

IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name='20秒一次的作业')
    EXEC msdb.dbo.sp_delete_job @job_name='20秒一次的作业'

--定义创建作业
DECLARE @jobid uniqueidentifier
EXEC msdb.dbo.sp_add_job
    @job_name = N'20秒一次的作业',
    @job_id = @jobid OUTPUT

--定义作业步骤
DECLARE @sql nvarchar(400),@dbname sysname
SELECT @dbname=DB_NAME(),
    @sql=N'
        DECLARE @dt datetime
        SET @dt=DATEADD(Minute,1,GETDATE())
        WHILE @dt>GETDATE()
        BEGIN
            IF EXISTS(SELECT * FROM sysobjects WHERE name=''tb_log'')            
                INSERT tb_log VALUES(CONVERT(char(8),GETDATE(),108))
            ELSE
                SELECT dt=CONVERT(char(8),GETDATE(),108) INTO tb_log
            WAITFOR DELAY ''00:00:20''
        END'
EXEC msdb.dbo.sp_add_jobstep
    @job_id = @jobid,
    @step_name = N'作业步骤名称',
    @subsystem = 'TSQL',
    @database_name=@dbname,
    @command = @sql

--创建调度
EXEC msdb..sp_add_jobschedule
    @job_id = @jobid,
    @name = N'每分钟执行的调度',
    @freq_type=4,
    @freq_interval=1,
    @freq_subday_type=0x4,
    @freq_subday_interval=1,
    @active_start_time = 000000

--添加目标服务器
DECLARE @servername sysname
SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))
EXEC msdb.dbo.sp_add_jobserver
    @job_id = @jobid,
    @server_name = @servername
GO

--等待2分钟后查看结果
WAITFOR DELAY '00:02:00'
SELECT * FROM tb_log ORDER BY dt
GO

--删除测试
DROP TABLE tb_log
EXEC msdb.dbo.sp_delete_job @job_name='20秒一次的作业'

/*--结果
dt       
--------
15:08:00
15:08:20
15:08:40
--*/
原文地址:https://www.cnblogs.com/shihao/p/2522190.html