你的数据库服务器-》企业管理器-》管理-》SQL Server 代理-》作业-》新建作业,按照要求填就可以了,在“步骤”的“命令”中填写你要执行的存储过程或语句,在“调度”里面填写什么时间执行
EXEC sp_add_job @job_name = '作业名字'
EXEC sp_add_jobstep @job_name = '作业名字',
@step_name = '步骤名子',
@subsystem = 'TSQL',
@command = 'EXEC 库名..过程名',
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔EXEC sp_add_jobschedule @job_name = '作业名字',
@name = '作业调度名字',
@freq_type = 4, -- 每天
@freq_interval = 26, --间隔
@active_start_time = 10000 --开始时间
EXEC sp_add_jobstep @job_name = '作业名字',
@step_name = '步骤名子',
@subsystem = 'TSQL',
@command = 'EXEC 库名..过程名',
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔EXEC sp_add_jobschedule @job_name = '作业名字',
@name = '作业调度名字',
@freq_type = 4, -- 每天
@freq_interval = 26, --间隔
@active_start_time = 10000 --开始时间
我动态创建的job只执行一次,执行完后,需要用语句删除吗?
如果要删除,我又怎么判断该job执行结束呢?
exec msdb..sp_add_job @job_name='数据处理'--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_createxml' --数据处理的命令
,@dbname=db_name() --执行数据处理的数据库名exec msdb..sp_add_jobstep @job_name='数据处理',
@step_name = '数据同步',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type = 4, --每天
@freq_interval = 1, --每天执行一次
@active_start_time = 00000 --0点执行
如果我的job只执行一次,并且是要立即执行,在schedule里面怎么指定参数?
if exists(SELECT 1 FROM msdb.dbo.sysjobs where name='数据处理')
EXEC msdb.dbo.sp_delete_job @job_name = N'数据处理'
--创建作业
exec msdb..sp_add_job @job_name='数据处理'--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_createxml' --数据处理的命令
,@dbname=db_name() --执行数据处理的数据库名exec msdb..sp_add_jobstep @job_name='数据处理',
@step_name = '数据同步',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔
--创建调度
declare @d int
select @d=cast(convert(varchar,getdate(),112) as int) --仅今天执行,也可以手工指定执行日期,这样解决只执行一次的问题.
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type = 4, --每天
@freq_interval = 1, --每天执行一次
@active_start_time = 00000, --0点执行
@active_end_date = @d, --结束日期,通过指定它,来控制
@active_end_time = 235959 --结束时间
我的想法是调用存储过程将被调用的存储过程通过job方式,提交到后台执行,然后调用存储过程又去接受其它的需要被调用的存储过程,继续提交到后台通过job方式执行
exec msdb..sp_add_job @job_name='数据处理',@job_id= @job_id OUTPUTselect 创建的作业id=@job_id
exec msdb..sp_add_job @job_name='数据处理',@job_id= @job_id OUTPUTselect 创建的作业id=@job_idexec msdb..sp_delete_job @job_name='数据处理'