设为首页 收藏本站
查看: 632|回复: 0

[经验分享] SQL定时作业的制定

[复制链接]

尚未签到

发表于 2016-11-10 09:23:33 | 显示全部楼层 |阅读模式
  定时作业的制定
  企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ...
  --确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
  
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
  设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
  SQL2005 的设置参考:
  SQL server 2005中建立备份自动化任务
  http://543925535.blog.iyunv.com/639838/168511
  /*--创建作业过程代码
  --邹建 2003.10(引用时请保留此信息)--*/
  /*--调用示例
  --每月执行的作业
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分执行
  go
  /*--作业处理实例
  根据sendTab的SendTime定制作业
  并且在该作业完成时,可以自动删除作业
  --邹建2004.04(引用请保留此信息)--*/
  --示例
  --测试表
  create table sendTab(ID int identity(1,1),Name varchar(10)
  ,SendTime datetime,AcceptUnit varchar(10)
  ,SendUnit varchar(10),Content varchar(8000))
  create table accepteTab(ID int identity(1,1),Name varchar(10)
  ,SendUnit varchar(10),AcceptUnit varchar(10),Content varchar(8000))
  go
  --创建处理的存储过程
  create proc p_JobSet
  @id int, --要处理的sendTab的id
  @is_delete bit=0 --是否仅删除,为则否,为则是
  as
  declare @dbname sysname,@jobname sysname
  ,@date int,@time int
  select @jobname='定时发送作业_'+cast(@id as varchar)
  ,@date=convert(varchar,SendTime,112)
  ,@time=replace(convert(varchar,SendTime,108),':','')
  from sendTab where id=@id
  if exists(select 1 from msdb..sysjobs where name=@jobname)
  exec msdb..sp_delete_job @job_name=@jobname
  if @is_delete=1 return
  --创建作业
  exec msdb..sp_add_job @job_name=@jobname,@delete_level=1
  --创建作业步骤
  declare @sql varchar(800)
  select @sql='insert accepteTab(name,SendUnit,AcceptUnit,Content)
  select name,AcceptUnit,SendUnit,Content from sendTab where id='
  +cast(@id as varchar)
  ,@dbname=db_name()
  exec msdb..sp_add_jobstep @job_name=@jobname,
  @step_name = '发送处理步骤',
  @subsystem = 'TSQL',
  @database_name=@dbname,
  @command = @sql,
  @retry_attempts = 5, --重试次数
  @retry_interval = 5 --重试间隔
  --创建调度
  EXEC msdb..sp_add_jobschedule @job_name = @jobname,
  @name = '时间安排',
  @enabled = 1,
  @freq_type = 1,
  @active_start_date = @date,
  @active_start_time = @time
  -- 添加目标服务器
  EXEC msdb.dbo.sp_add_jobserver
  @job_name = @jobname ,
  @server_name = N'(local)'
  go
  --创建处理的触发器(新增/修改)
  create trigger tr_insert_update on sendTab
  for insert,update
  as
  declare @id int
  declare tb cursor local for select id from inserted
  open tb
  fetch next from tb into @id
  while @@fetch_status=0
  begin
  exec p_JobSet @id
  fetch next from tb into @id
  end
  close tb
  deallocate tb
  go
  --创建处理的触发器(删除)
  create trigger tr_delete on sendTab
  for delete
  as
  declare @id int
  declare tb cursor local for select id from deleted
  open tb
  fetch next from tb into @id
  while @@fetch_status=0
  begin
  exec p_JobSet @id,1
  fetch next from tb into @id
  end
  close tb
  deallocate tb
  go
  --测试
  --插入数据
  insert sendTab
  select '文书','2004/5/1 12:00:00','UnitA','UnitB','txt'
  union all select '文书','2004/5/12 12:00:00','UnitA','UnitB','txt'
  union all select '文书','2004/5/21 12:00:00','UnitA','UnitB','txt'
  --修改
  update sendTab set name='档案',SendTime='2004/5/1 15:00:00'
  where id=1
  --删除
  delete sendtab where id=3
  go
  --删除测试
  drop table sendTab,accepteTab
  drop proc p_JobSet
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298271-1-1.html 上篇帖子: 十步完全理解SQL 下篇帖子: SQL语句学习笔记一
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表