在SQL Server日常需求处理中,会遇到定时执行或统计数据的需求,这时我们可以通过作业(JOB)来处理,从而通过代理的方式来实现数据的自动处理。一下为SQL Server中创建作业的脚本,供大家参考使用。

一、创建作业(JOB)

-- SQL SERVER2000 作业(JOB)T-SQL创建脚本
-- author: jiajia
-- 服务器: (local)

--参数说明:
-- daily_pr_stat_test (作业名称:测试JOB名称,可根据需求进行修改)
-- @command = N'exec pr_stat_test' (作业调用可执行存储过程或SQL语句:pr_stat_test--执行数据统计的可运行存储过程,当然你也可以换成可执行的SQL语句)
-- @database_name = N'test' (运行数据库:test--存储过程所在库)
-- @active_start_date = 20121207 (作业执行的开始日期:为NULL时表示当前日期,格式为YYYYMMDD。20121207--该作业开始执行日期)
-- @active_end_date = 99991231 (作业执行的停止日期:默认为99991231,格式为YYYYMMDD)
-- @active_start_time = 84100 (作业执行的开始时间:格式为HHMMSS,84100--该作业开始执行时间)
-- @active_end_time = 235959 (作业执行的停止时间:格式为HHMMSS,235959--该作业执行结束时间)
-- @freq_type = 4 (作业执行时间的值:1--一次;4--每天;8--每周;16--每月;32--每月,相对于 freqinterval;64--SQLServerAgent 服务启动时运行;128--计算机空闲时运行)
-- @freq_interval = 1 (重复执行次数:1--每天执行一次)
-- @freq_subday_type = 1 (重复方式:0x1--在指定的时间;0x2--秒;0x4--分钟;0x8--小时)
-- @freq_subday_interval = 0 (重复周期数:0--不重复,1--每小时执行一次)
-- @freq_relative_interval = 0 (第几个相对时间执行:允许的值为1,2,4,8代表第1~4个相对时间,16表示最后一个相对时间)
-- @freq_recurrence_factor = 0 (作业的两次计划执行之间的间隔周数或月数:只有 freq_type 为 8、16 或 32 时,才会使用 freq_recurrence_factor)

BEGIN TRANSACTION           
  DECLARE @JobID BINARY(16) 
  DECLARE @ReturnCode INT   
  SELECT @ReturnCode = 0

--判断本地作业类别是否存在,不存在则添加
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1
  EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'

--判断作业是否存在,如存在则提示处理,不存在则新建
IF (SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'daily_pr_stat_test') > 0
  PRINT N'作业“daily_pr_stat_test”已经存在,因而将不被替换。'
ELSE
BEGIN

-- 添加作业
  EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'daily_pr_stat_test', @owner_login_name = N'sa',

@description = N'没有可用的描述。', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page

= 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- 添加作业步骤
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'1', @command = N'exec pr_stat_test',

@database_name = N'test', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0,

@retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0,

@on_fail_action = 2
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
  EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1

IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- 添加作业调度
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'1', @enabled = 1, @freq_type = 4, @active_start_date =

20121207, @active_start_time = 84100, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0,

@freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- 添加目标服务器
  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION         
GOTO   EndSave             
QuitWithRollback:
  IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

二、删除作业(JOB)

1、使用 SQL Server Management Studio删除

删除单个作业:

在“对象资源管理器”中,连接到 SQL Server 数据库引擎实例,再展开该实例。
   依次展开“SQL Server 代理”和“作业”,右键单击要删除的作业,再单击“删除”。
   在“删除对象”对话框中,确认选择了要删除的作业。
   单击“确定”。

删除多个作业:

在“对象资源管理器”中,连接到 SQL Server 数据库引擎实例,再展开该实例。
   展开“SQL Server 代理”。
   右键单击“作业活动监视器”,然后单击“查看作业活动”。
   在作业活动监视器中,选择要删除的作业,右键单击选择的作业,然后选择“删除作业”。

2、使用SQL语句删除

USE msdb ;
   GO

EXEC sp_delete_job

@job_name = N'daily_pr_stat_test' ;
   GO

三、查看作业(JOB)的相关信息

-- 查看作业是否存在
SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'daily_pr_stat_test'

--查询作业运行状态信息(run_status: 0=出错失败,1=成功,3=已取消,5=状态未知),SQL Server2005以上
exec msdb.dbo.sp_help_jobactivity  @job_name=N'daily_pr_stat_test'

-- 查看数据库中当前定义的所有作业的全部属性
exec msdb..sp_help_job

--查看作业历史

select a.*,b.name

from msdb.dbo.sysjobhistory a

inner join msdb.dbo.sysjobs b

on a.job_id=b.job_id

and b.name='daily_pr_stat_test'

--and a.run_status=0 --作业失败信息
order by a.run_time desc

-- 查看指定作业的全部属性
exec msdb..sp_help_job @job_name=N'daily_pr_stat_test'

-- 可查看执行语句或者存储过程等等
exec msdb..sp_help_jobstep @job_name=N'daily_pr_stat_test'

-- 查看作业历史执行时间等信息

A、SQL Server2000版本中:

SELECT  j.name AS 'JobName', 
        s.step_id AS 'Step', 
        s.step_name AS 'StepName',
        run_date, 
        run_time, 
        convert(varchar(32),left(run_date,4)+'-'+substring(convert(varchar(10),run_date),5,2)+'-'+right(run_date,2),120)+' '
       +substring(convert(varchar(10),run_time),1,len(run_time)-4)+':'+substring(convert(varchar(10),run_time),len(run_time)-3,2)+':'+right(run_time,2) AS 'RunDateTime',    
        ((run_duration /10000 * 3600 + (run_duration / 100 ) % 100 * 60 + run_duration % 100 + 31) / 60) AS 'RunDurationMinutes' 
FROM    msdb.dbo.sysjobs j 
        INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id 
        INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id 
        AND s.step_id = h.step_id 
        AND h.step_id <> 0 
WHERE   j.enabled = 1  --Only Enabled Jobs 
and j.name like '%vip_report%'
ORDER   BY JobName,RunDateTime DESC

B、SQL Server2005以上版本中:
SELECT  j.name AS 'JobName' , 
        s.step_id AS 'Step' , 
        s.step_name AS 'StepName' , 
        msdb.dbo.agent_datetime(run_date, run_time) AS 'RunDateTime' , 
        (( run_duration / 10000 * 3600 + (run_duration / 100) % 100 * 60 + run_duration % 100 + 31) / 60) AS 'RunDurationMinutes' 
FROM    msdb.dbo.sysjobs j 
        INNER JOIN msdb.dbo.sysjobsteps s ON j.job_id = s.job_id 
        INNER JOIN msdb.dbo.sysjobhistory h ON s.job_id = h.job_id 
        AND s.step_id = h.step_id 
        AND h.step_id <> 0 
WHERE   j.enabled = 1   --Only Enabled Jobs 
ORDER  BY JobName,RunDateTime DESC

四、修改指定作业(JOB)相关属性值

1、修改作业开始执行日期和时间

update a

set a.active_start_date='20141010',a.active_start_time='082000'

from msdb.dbo.sysschedules a,msdb.dbo.sysjobschedules b,msdb.dbo.sysjobs c

where a.schedule_id=b.schedule_id

and b.job_id=c.job_id

and c.name=N'daily_pr_stat_test'

2、修改指定作业下次执行时间

update a
set next_run_time='114000'
from msdb.dbo.sysjobschedules a,msdb.dbo.sysjobs b
where a.job_id=b.job_id
and b.name=N'daily_pr_stat_test'

3、启用作业

exec msdb.dbo.sp_update_job @job_name='daily_pr_stat_test',@enabled=1

4、禁用作业

exec msdb.dbo.sp_update_job @job_name='daily_pr_stat_test',@enabled=0

5、立即运行作业
exec msdb.dbo.sp_start_job N'daily_pr_per_test'

6、立即停止正在运行中的作业(可能导致不可预知的结果)
exec msdb.dbo.sp_stop_job N'daily_pr_per_test'

7、修改作业其他参数

exec msdb..sp_update_job @job_name=N'daily_pr_stat_test'

更多相关参数请参考:http://technet.microsoft.com/zh-cn/magazine/ms188745(SQL.105).aspx

注:更多详细参数说明请参考:http://msdn.microsoft.com/zh-cn/library/ms182079(v=sql.105).aspx或者http://msdn.microsoft.com/zh-cn/library/ms187354(v=sql.105).aspx/css

创建作业(JOB)的更多相关文章

  1. SQL SERVER 创建作业

    ),,                ,            ,     , ,      ),SERVERPROPERTY(N,                ,            ,     ...

  2. 使用SQL Server Management Studio 创建作业备份数据库

    在项目中,经常需要备份数据库,如果能做到只需点个按钮(“开始备份数据库”按钮),然后什么都不管,数据库就自动备份好了,或者服务器上的数据库隔一段时间自动备份一次,那该多好啊. Sql server 的 ...

  3. sqlserver 使用脚本创建作业

    --[作业常用的几个步骤] EXEC msdb.dbo.sp_delete_job EXEC msdb.dbo.sp_add_job EXEC msdb.dbo.sp_add_jobstep EXEC ...

  4. T-SQL创建作业

    /*1.--创建作业 */ /*--调用示例 --每月执行的作业 exec p_createjob @jobname='mm',@sql='select * from syscolumns',@fre ...

  5. SQL2000中创建作业(定时查询,更新)(转)

    出处:http://blog.csdn.net/xys_777/article/details/5683413 SQL2000中创建作业(定时查询,更新)企业管理器 --管理 --SQL Server ...

  6. sql创建作业--自动执行存储过程

    创建自动执行存储过程: 1.创建参数 2.删除已有同名的作业 3. 创建作业 4.创建作业步骤 5.连接服务器 6.创建作业调度 7.启动作业 ALTER PROCEDURE dbo.sx_pro_A ...

  7. kettle 创建作业发送邮件

    1.创建作业 . 2. 发送邮件配置,测试邮件 发件地址可以使用的QQ.126.163等邮箱 smtp server的填写smtp.qq.com或者smtp.126.com等等都可以这里我用Q163邮 ...

  8. SQL Server 批量创建作业(备份主分区)

    一. 需求背景 在我的数据库实例中,有很多类似下图所示的数据库,这些数据库的名称是有规律的,每个数据库包含的表都是相同的,其中2个表是类似流水记录的表,表的数据量会比较大,占用的空间有几十G到上百G不 ...

  9. SQL Server 创建作业系列问题

    一.从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败. 尊重原著作:本文转载自http://www.hao ...

随机推荐

  1. SharePoint使用jsom查询当前用户信息

    前置环境:sharepoint 'use strict'; var context = SP.ClientContext.get_current(); var user = context.get_w ...

  2. COMP9334 Project

    COMP9334 Project, Term 1, 2019:Fog/cloud ComputingVersion 1.0Due Date: 11:00pm Friday 26 April 2019. ...

  3. 判断为false的情况

    console.log(''==false)  //true console.log('0' == false)  //true console.log(null == false) //false, ...

  4. Python的基本语法1

    一.python的基本数据类型 (1)6种基本数据类型 1.数字类型 int 整数,2,0,-4等 float 浮点数,如1.2,-0.3等 bool 布尔类型,True,False complex ...

  5. 解决python3 pip安装、更新及yaml安装

    问题:python3.6版本使用pip安装第三方库时总是报错 电脑中存在多个python版本写成对应pip版本 解决:pip3 install pyOpenSSL -i http://pypi.dou ...

  6. jquery 改变img的src

    jQuery修改img的src的方法: $("#img_id").attr("src","new_src"); 此语句的功能是:修改id为i ...

  7. 使用vue+elementUI+springboot创建基础后台增删改查的管理页面--(1)

    目前这家公司前端用的是vue框架,由于在之前的公司很少涉及到前端内容,对其的了解也只是会使用js和jquery,所以..慢慢来吧. 在此之前需要先了解vue的大致语法和规则,可先前往官方文档进行学习h ...

  8. python学习笔记1-基础知识

    # 0.输入输出 # print数值型直接输出计算结果 pirnt( + ) # 输出 + = # input输入(可在括号内加提示语句) name = input('please enter you ...

  9. python 1-100的数相加的和

    count = 1 sum = 0 while count <= 100: sum = sum + count count = count + 1 print(sum) 解释: count表示计 ...

  10. OO第二次博客

    过去三周里,我们完成了多线程电梯的程序设计与构造.这是我第一次接触多线程编程.我感觉最大的困难在于多个线程中的操作,谁先谁后,不是像以前写的单线程程序那样严格确定,所以心里常常会比较慌.尤其是因为多线 ...