sqlserver通过脚本创建定时任务

  • Post author:
  • Post category:其他


这个是在CSDN一个帖子里发现的,正好我用的到,就转过来了


libin_ftsafe(子陌红尘:当libin告别ftsafe)




通过脚本创建JOB:

————————————————————————————-




if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_createjob]’)   and   OBJECTPROPERTY(id,   N’IsProcedure’)   =   1)

drop   procedure   [dbo].[p_createjob]

GO

create   proc   p_createjob

@jobname   varchar(100),                           –作业名称

@sql   varchar(8000),                                 –要执行的命令

@serverName   sysname=”,                         –job   server名

@dbname   sysname=”,                                 –默认为当前的数据库名

@freqtype   varchar(6)=’day’,                 –时间周期,month   月,week   周,day   日

@fsinterval   int=1,                                   –相对于每日的重复次数

@time   int=170000                                       –开始执行时间,对于重复执行的作业,将从0点到23:59分

as

if   isnull(@dbname,”)=”   set   @dbname=db_name()

–创建作业

exec   msdb..sp_add_job   @job_name=@jobname

–创建作业步骤

exec   msdb..sp_add_jobstep   @job_name=@jobname,

@step_name   =   ‘数据处理’,

@subsystem   =   ‘TSQL’,

@database_name=@dbname,

@command   =   @sql,

@retry_attempts   =   5,   –重试次数

@retry_interval   =   5     –重试间隔

–创建调度

declare   @ftype   int,@fstype   int,@ffactor   int

select   @ftype=case   @freqtype   when   ‘day’   then   4

when   ‘week’   then   8

when   ‘month’   then   16   end

,@fstype=case   @fsinterval   when   1   then   0   else   8   end

if   @fsinterval<>1   set   @time=0

set   @ffactor=case   @freqtype   when   ‘day’   then   0   else   1   end

EXEC   msdb..sp_add_jobschedule   @job_name=@jobname,

@name   =   ‘时间安排’,

@freq_type=@ftype   ,                                                 –每天,8   每周,16   每月

@freq_interval=1,                                                     –重复执行次数

@freq_subday_type=@fstype,                                   –是否重复执行

@freq_subday_interval=@fsinterval,                   –重复周期

@freq_recurrence_factor=@ffactor,

@active_start_time=@time                                       –下午17:00:00分执行

if   @servername=”

set   @servername=@@servername

EXEC   msdb..sp_add_jobserver   @job_name   =   @jobname,

@server_name   =   @servername

go

–调用

–每天执行的作业

exec   p_createjob   @jobname=’dd’

,@sql=’insert   B   select   convert(char(10),getdate(),120),1+(select   max([text])   from   B)’

,@servername=’job服务器名’

,@dbname=’数据库名’

,@freqtype=’day’

,@time=’000000′

===============================================================

以下是另一个版本,出自博客园


http://www.cnblogs.com/datasky/archive/2006/12/28/606354.html


–每月执行的作业

exec p_createjob @jobname=’mm’,@sql=’select * from syscolumns’,@freqtype=’month’

–每周执行的作业

exec p_createjob @jobname=’ww’,@sql=’select * from syscolumns’,@freqtype=’week’

–每日执行的作业

exec p_createjob @jobname=’a’,@sql=’select * from syscolumns’

–每日执行的作业,每天隔4小时重复的作业

exec p_createjob @jobname=’b’,@sql=’select * from syscolumns’,@fsinterval=4

–*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)

drop procedure [dbo].[p_createjob]

GO

create proc p_createjob

@jobname varchar(100),–作业名称

@sql varchar(8000),–要执行的命令

@dbname sysname=”,–默认为当前的数据库名

@freqtype varchar(6)=’day’,–时间周期,month 月,week 周,day 日

@fsinterval int=1,–相对于每日的重复次数

@time int=170000–开始执行时间,对于重复执行的作业,将从0点到23:59分

as

if isnull(@dbname,”)=” set @dbname=db_name()

–创建作业

exec msdb..sp_add_



job


@


job


_name=@jobname




–创建作业步骤




exec msdb..sp_add_jobstep @


job

_name=@jobname,

@step_name = ‘数据处理’,

@subsystem = ‘TSQL’,

@database_name=@dbname,

@command = @sql,

@retry_attempts = 5, –重试次数

@retry_interval = 5  –重试间隔

–创建调度

declare @ftype int,@fstype int,@ffactor int

select @ftype=case @freqtype when ‘day’ then 4

when ‘week’ then 8

when ‘month’ then 16 end

,@fstype=case @fsinterval when 1 then 0 else 8 end

if @fsinterval<>1 set @time=0

set @ffactor=case @freqtype when ‘day’ then 0 else 1 end

EXEC msdb..sp_add_jobschedule @

job

_name=@jobname,

@name = ‘时间安排’,

@freq_type=@ftype , –每天,8 每周,16 每月

@freq_interval=1,–重复执行次数

@freq_subday_type=@fstype,–是否重复执行

@freq_subday_interval=@fsinterval, –重复周期

@freq_recurrence_factor=@ffactor,

@active_start_time=@time  –下午17:00:00分执行

— 添加目标服务器

EXEC msdb.dbo.sp_add_jobserver

@

job

_name = @jobname ,

@server_name = N'(local)’

go