通过存储过程建立灵活的SQL计划任务

日期: 2011-01-17 作者:mxh691 来源:TechTarget中国 英文

  在SQL2005里我们可以直接建立计划任务,但是有时候我们又希望这计划任务灵活些,希望带些参数什么的。

  比如我们想通过ASP.NET这样B/S结合的形式建立计划任务,通过页面临时的参数,让其建立不同的计划任务。

  在查找了一些资料后发现QUARTZ可以,但是有些麻烦。后来找到了个存储过程建立计划任务方式,稍微修改了下,分享给大家

  CREATE proc [dbo].[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()
  –判断作业是否存在
  if exists(select * from msdb.dbo.sysjobs
  where name=@jobname)
  begin
  –如果作业存在则先删除原来作业
  EXECUTE msdb..sp_delete_job @job_name = @jobname
  end
  –创建作业
  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..sp_add_jobserver
  @job_name = @jobname,
  @server_name = N'(local)’

  在中间部分我偷懒了些,直接把存在的计划任务删除了重新建立(这样历史会丢失),要做的更完美些的化,其实可以判断如果不存在该计划任务的话,先建立,否则则修改,可以通过msdb..sp_update_job 来实现

  在这里的@SQL,可以是带参数的存储过程啥的。

  另外对于按月统计型的存储过程,可以这样实现:exec test 100 这样实际每次实行此存储过程的时候过程实体里都是当月信息,取年同理

  create proc test
  @temp_month int =100
  if @temp_month=100 begin set @temp_month=month(getdate()) end
  –下面是过程实体

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

mxh691
mxh691

相关推荐