如何在其他作业失败时自动运行SQL代理作业

时间:2014-03-16 09:18:33

标签: sql-server sql-agent-job sql-agent

我有一个存储过程,它将作业名称作为输入,并发送包含作业历史信息的邮件。 当其他作业失败时,如何自动运行此作业?

有没有办法将作业的名称(或ID)传递给此存储过程?

由于

1 个答案:

答案 0 :(得分:0)

您可以使用SQL代理令牌获取当前正在执行的作业的名称或ID(http://technet.microsoft.com/en-us/library/ms175575(v=sql.105).aspx)。

要进行此设置,请执行以下操作:

  1. 添加新步骤"电子邮件职位历史记录"到你的工作结束
  2. 将每个工作步骤更改为" OnFailure"行动"转到步骤:{n}电子邮件作业历史记录",其中{n}是上面添加的步骤的步骤#。
  3. 使用SQL代理令牌获取当前正在执行的JOBID以及您需要的任何其他信息。 "电子邮件职位历史记录"下面是T-SQL步骤,其中msdb.dbo.usp_SQLAgentSendJobStepFailedEmail将是您的程序名称:
  4. "电子邮件职位历史记录" T-SQL步骤:

    DECLARE @jobid uniqueidentifier, @run_date int, @run_time int, @profile_name sysname;
    
    set @profile_name = 'MyDatabaseMailProfileName';
    
    --USE SQL AGENT "TOKENS" TO GET CURRENT JOB PARAM VALUES
    set @jobid = $(ESCAPE_NONE(JOBID));
    set @run_date = $(ESCAPE_NONE(STRTDT));
    set @run_time = $(ESCAPE_NONE(STRTTM));
    
    EXEC msdb.dbo.usp_SQLAgentSendJobStepFailedEmail @jobid = @jobid, @run_date = @run_date, @run_time = @run_time, @email_profile_name = @profile_name;