通過預存程序建立靈活的SQL計劃任務

來源:互聯網
上載者:User

在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 

--下面是過程實體

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.