• 定时执行某操作的存储过程(sql作业)(2)


    在上一篇中演示了如何手动创建一个作业,接下来介绍如何通过sql语句来实现一个作业的创建。

       如果在上一篇中最后操作完成之后将作业脚本进行了分析的会发现里面其实就是一些关键参数的传递,按照固定的格式进行填充就可以完成一个作业的创建了。
       以下代码都做了注释,可以查阅相关意思

        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 

       以下是摘抄网上一前辈的代码,可以借鉴理解
        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)'
  • 相关阅读:
    欧拉工程第72题:Counting fractions
    欧拉工程第71题:Ordered fractions
    欧拉工程第70题:Totient permutation
    欧拉工程第69题:Totient maximum
    欧拉工程第68题:Magic 5-gon ring
    欧拉工程第67题:Maximum path sum II
    欧拉工程第66题:Diophantine equation
    欧拉工程第65题:Convergents of e
    欧拉工程第64题:Odd period square roots
    欧拉工程第63题:Powerful digit counts
  • 原文地址:https://www.cnblogs.com/tzy080112/p/1402391.html
Copyright © 2020-2023  润新知