169.实现秒级作业的案例

1.多个作业调度

USE tempdb

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

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

--定义作业步骤
DECLARE @sql nvarchar(400),@dbname sysname
SELECT @dbname=DB_NAME(),
	@sql=N'
		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'
EXEC msdb.dbo.sp_add_jobstep
	@job_id = @jobid,
	@step_name = N'作业步骤名称',
	@subsystem = 'TSQL',
	@database_name=@dbname,
	@command = @sql

--创建调度1
EXEC msdb..sp_add_jobschedule
	@job_id = @jobid,
	@name = N'第1个30秒',
	@freq_type=4,
	@freq_interval=1,
	@freq_subday_type=0x4,
	@freq_subday_interval=1,
	@active_start_time = 00000

--创建调度2
EXEC msdb..sp_add_jobschedule
	@job_id = @jobid,
	@name = N'第2个30秒',
	@freq_type=4,
	@freq_interval=1,
	@freq_subday_type=0x4,
	@freq_subday_interval=1,
	@active_start_time = 00030

--添加目标服务器
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='30秒一次的作业'

/*--结果
dt       
-------- 
14:54:01
14:54:31
14:55:01
14:55:31
--*/

2.使用waitfor

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
--*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值