现在位置:
首页 > SQL Server > 正文
定时调用存储过程的作业
- if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_JobSet]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
- drop procedure [dbo].[p_JobSet]
- GO
- /*--指定时间调用存储过程
- 创建一个在指定时间,调用指定存储过程的作业
- 作业执行完成后会自动删除
- /*--调用示例
- declare @dt datetime
- set @dt=dateadd(minute,1,getdate()) --当前时间1分钟后执行
- exec p_JobSet 'master.dbo.xp_cmdshell ''dir c:\*.*''',@dt
- --*/
- create proc p_JobSet
- @prorcname sysname, --要调用定时调用的存储过程名,如果不在当前库中,则用:库名.所有者名.存储过程名
- @job_date datetime --存储过程的执行时间(包括时间信息)
- with encryption
- as
- declare @dbname sysname,@jobname sysname
- ,@date int,@time int
- select @jobname='临时作业_'+cast(newid() as varchar(36))
- ,@date=convert(varchar,@job_date,112)
- ,@time=replace(convert(varchar,@job_date,108),':','')
- if exists(select 1 from msdb..sysjobs where name=@jobname)
- exec msdb..sp_delete_job @job_name=@jobname
- --创建作业
- exec msdb..sp_add_job @job_name=@jobname,@delete_level=1
- --创建作业步骤
- declare @sql varchar(800)
- select @sql='exec '+@prorcname
- ,@dbname=db_name()
- exec msdb..sp_add_jobstep @job_name=@jobname,
- @step_name = '处理步骤',
- @subsystem = 'TSQL',
- @database_name=@dbname,
- @command = @sql,
- @retry_attempts = 5, --重试次数
- @retry_interval = 5 --重试间隔
- --创建调度
- EXEC msdb..sp_add_jobschedule @job_name = @jobname,
- @name = '时间安排',
- @enabled = 1,
- @freq_type = 1,
- @active_start_date = @date,
- @active_start_time = @time
- -- 添加目标服务器
- EXEC msdb.dbo.sp_add_jobserver
- @job_name = @jobname ,
- @server_name = N'(local)'
- go