如果在上一篇中最后操作完成之后将作业脚本进行了分析的会发现里面其实就是一些关键参数的传递,按照固定的格式进行填充就可以完成一个作业的创建了。
以下代码都做了注释,可以查阅相关意思
1
2 ALTER PROCEDURE AutoJob
3 @JobName nvarchar(100),--作业名
4 @SQLStr nvarchar(500),--要执行的操作内容
5 @DBName nvarchar(100),--作用的数据库
6 @StepName nvarchar(100),--步骤名
7 @RetryTimes int,--重复次数
8 @RetryInterval int,--重复间隔
9 @ScheduleName nvarchar(100),--调度名称
10 @FreqType int,--执行作业的周期 4 每天,8 每周,16 每月
11 @FreqInterval int,--每天执行次数
12 @ActiveTime int,--执行的具体时间(格式:hhmmss)
13 @Server varchar(100)--服务器
14
15 AS
16 --创建作业
17 EXEC msdb..sp_add_job @job_name=@JobName
18
19 --创建作业步骤
20 EXEC msdb..sp_add_jobstep @job_name=@JobName,
21 @step_name=@StepName,
22 @subsystem='TSQL',
23 @database_name=@DBName,
24 @command=@SQLStr,
25 @retry_attempts=@RetryTimes,
26 @retry_interval=@RetryInterval
27
28 --创建调度
29 EXEC msdb..sp_add_jobschedule @job_name=@JobName,
30 @name=@ScheduleName,
31 @freq_type=@FreqType,
32 @freq_interval=@FreqInterval,
33 @active_start_time=@ActiveTime
34
35 --目标服务器
36 EXEC msdb.dbo.sp_add_jobserver
37 @job_name=@JobName,
38 @server_name=@Server
39
40
3 @JobName nvarchar(100),--作业名
4 @SQLStr nvarchar(500),--要执行的操作内容
5 @DBName nvarchar(100),--作用的数据库
6 @StepName nvarchar(100),--步骤名
7 @RetryTimes int,--重复次数
8 @RetryInterval int,--重复间隔
9 @ScheduleName nvarchar(100),--调度名称
10 @FreqType int,--执行作业的周期 4 每天,8 每周,16 每月
11 @FreqInterval int,--每天执行次数
12 @ActiveTime int,--执行的具体时间(格式:hhmmss)
13 @Server varchar(100)--服务器
14
15 AS
16 --创建作业
17 EXEC msdb..sp_add_job @job_name=@JobName
18
19 --创建作业步骤
20 EXEC msdb..sp_add_jobstep @job_name=@JobName,
21 @step_name=@StepName,
22 @subsystem='TSQL',
23 @database_name=@DBName,
24 @command=@SQLStr,
25 @retry_attempts=@RetryTimes,
26 @retry_interval=@RetryInterval
27
28 --创建调度
29 EXEC msdb..sp_add_jobschedule @job_name=@JobName,
30 @name=@ScheduleName,
31 @freq_type=@FreqType,
32 @freq_interval=@FreqInterval,
33 @active_start_time=@ActiveTime
34
35 --目标服务器
36 EXEC msdb.dbo.sp_add_jobserver
37 @job_name=@JobName,
38 @server_name=@Server
39
40
以下是摘抄网上一前辈的代码,可以借鉴理解
1
2
3 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Pro_AddTask]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
4 drop procedure [dbo].[Pro_AddTask]
5 GO
6 create proc Pro_AddTask
7 @taskname varchar(100), --task name
8 @sql varchar(8000), --slq command
9 @dbname sysname='', -- default the current db
10 @freqtype varchar(6)='day', --the frequence of time :month ,week ,day
11 @freqsubtype varchar(6)='no' ,--no, hour ,minute
12 @fqinterval int=1, --the execute times
13 @fqsubinterval int=1, --the sub interval
14 @time int=000000 -- execute on some time format(hhmmss)
15 as
16 /*--creat task
17
18 --author:sky 2008.02.27
19
20 discription:
21 when @freqtype='week' when @fqinterval=
22 1 = 星期日
23 2 = 星期一
24 4 = 星期二
25 8 = 星期三
26 16 = 星期四
27 32 = 星期五
28 64 = 星期六
29 */
30 /*--eg.
31
32 --每月执行的作业
33 exec Pro_AddTask @taskname='mm',@sql='seleCT * from syscolumns',@freqtype='month'
34
35 --每周执行的作业
36 exec Pro_AddTask @taskname='ww',@sql='select * from syscolumns',@freqtype='week'
37
38 --每日00000执行的作业
39 exec Pro_AddTask @taskname='ab',@sql='select * from syscolumns'
40
41 --每日12:00:00作业
42 exec Pro_AddTask @taskname='d12',@sql='select * from syscolumns',@time=12000
43
44 --每周六12:00:00作业
45 exec Pro_AddTask @taskname='w12',@sql='select * from syscolumns',@freqtype='week',@fqinterval=64,@time=12000
46
47 --每月20号12:00:00作业
48 exec Pro_AddTask @taskname='m20',@sql='select * from syscolumns',@freqtype='month',@fqinterval=20,@time=12000
49
50 --*/
51 if isnull(@dbname,'')='' set @dbname=db_name()
52 --create task
53 exec msdb..sp_add_job @job_name=@taskname
54
55 --create task step
56 exec msdb..sp_add_jobstep @job_name=@taskname,
57 @step_name = 'data process',
58 @subsystem = 'TSQL',
59 @database_name=@dbname,
60 @command = @sql,
61 @retry_attempts = 5,
62 @retry_interval = 5
63
64 --create schedule
65 declare @ftype int,@fstype int,@ffactor int
66 select @ftype=case @freqtype
67 when 'day' then 4
68 when 'week' then 8
69 when 'month' then 16
70 end
71 ,@fstype=case @freqsubtype
72 when 'no' then 1
73 when 'hour' then 4
74 when 'minutue' then 8
75 else 0
76 end
77 set @ffactor=case @freqtype when 'day' then 0 else 1 end
78
79 EXEC msdb..sp_add_jobschedule @job_name=@taskname,
80 @name = 'schedule',
81 @freq_type=@ftype , ---4 每天,8 每周,16 每月
82 @freq_interval=@fqinterval, --作业执行的天数
83 @freq_subday_type=@fstype, --是否重复执行,0x1 在指定的时间, 0x4 分钟, 0x8 小时
84 @freq_subday_interval=@fqsubinterval, --重复周期
85 @freq_recurrence_factor=@ffactor, --重复执行,则设置为1,否则设置为0
86 @active_start_time=@time --下午00:00:00分执行
87 -- add the goal server
88 EXEC msdb.dbo.sp_add_jobserver
89 @job_name = @taskname ,
90 @server_name = N'(local)'
3 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Pro_AddTask]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
4 drop procedure [dbo].[Pro_AddTask]
5 GO
6 create proc Pro_AddTask
7 @taskname varchar(100), --task name
8 @sql varchar(8000), --slq command
9 @dbname sysname='', -- default the current db
10 @freqtype varchar(6)='day', --the frequence of time :month ,week ,day
11 @freqsubtype varchar(6)='no' ,--no, hour ,minute
12 @fqinterval int=1, --the execute times
13 @fqsubinterval int=1, --the sub interval
14 @time int=000000 -- execute on some time format(hhmmss)
15 as
16 /*--creat task
17
18 --author:sky 2008.02.27
19
20 discription:
21 when @freqtype='week' when @fqinterval=
22 1 = 星期日
23 2 = 星期一
24 4 = 星期二
25 8 = 星期三
26 16 = 星期四
27 32 = 星期五
28 64 = 星期六
29 */
30 /*--eg.
31
32 --每月执行的作业
33 exec Pro_AddTask @taskname='mm',@sql='seleCT * from syscolumns',@freqtype='month'
34
35 --每周执行的作业
36 exec Pro_AddTask @taskname='ww',@sql='select * from syscolumns',@freqtype='week'
37
38 --每日00000执行的作业
39 exec Pro_AddTask @taskname='ab',@sql='select * from syscolumns'
40
41 --每日12:00:00作业
42 exec Pro_AddTask @taskname='d12',@sql='select * from syscolumns',@time=12000
43
44 --每周六12:00:00作业
45 exec Pro_AddTask @taskname='w12',@sql='select * from syscolumns',@freqtype='week',@fqinterval=64,@time=12000
46
47 --每月20号12:00:00作业
48 exec Pro_AddTask @taskname='m20',@sql='select * from syscolumns',@freqtype='month',@fqinterval=20,@time=12000
49
50 --*/
51 if isnull(@dbname,'')='' set @dbname=db_name()
52 --create task
53 exec msdb..sp_add_job @job_name=@taskname
54
55 --create task step
56 exec msdb..sp_add_jobstep @job_name=@taskname,
57 @step_name = 'data process',
58 @subsystem = 'TSQL',
59 @database_name=@dbname,
60 @command = @sql,
61 @retry_attempts = 5,
62 @retry_interval = 5
63
64 --create schedule
65 declare @ftype int,@fstype int,@ffactor int
66 select @ftype=case @freqtype
67 when 'day' then 4
68 when 'week' then 8
69 when 'month' then 16
70 end
71 ,@fstype=case @freqsubtype
72 when 'no' then 1
73 when 'hour' then 4
74 when 'minutue' then 8
75 else 0
76 end
77 set @ffactor=case @freqtype when 'day' then 0 else 1 end
78
79 EXEC msdb..sp_add_jobschedule @job_name=@taskname,
80 @name = 'schedule',
81 @freq_type=@ftype , ---4 每天,8 每周,16 每月
82 @freq_interval=@fqinterval, --作业执行的天数
83 @freq_subday_type=@fstype, --是否重复执行,0x1 在指定的时间, 0x4 分钟, 0x8 小时
84 @freq_subday_interval=@fqsubinterval, --重复周期
85 @freq_recurrence_factor=@ffactor, --重复执行,则设置为1,否则设置为0
86 @active_start_time=@time --下午00:00:00分执行
87 -- add the goal server
88 EXEC msdb.dbo.sp_add_jobserver
89 @job_name = @taskname ,
90 @server_name = N'(local)'