【问题标题】:How to automatically run SQL agent job upon failure of other job如何在其他作业失败时自动运行 SQL 代理作业
【发布时间】:2014-03-16 09:18:33
【问题描述】:

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

    “电子邮件作业历史”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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多