获取已运行已部署的SSIS包的特定执行的SQL Server代理作业

时间:2018-12-13 04:30:15

标签: sql-server ssis sql-job

我在SQL Server中部署了一个SSIS程序包,并且有3个不同的SQL Server代理作业以不同的步骤和时间表运行此程序包。

我的问题是:如果该包在Integration Services目录->报告中显示为失败,则其中一种执行方式是否可以识别出哪个运行该执行的工作,导致该包失败(不是通过从作业历史记录和包失败执行时间交叉检查失败时间)?

1 个答案:

答案 0 :(得分:1)

这不是很简单。根据{{​​3}},您可以尝试:

SELECT 
 history.*
,ex.* 
,ex.status
, CASE ex.status
    WHEN 1 THEN 'created'
    WHEN 2 THEN 'running'
    WHEN 3 then 'canceled'
    WHEN 4 then 'failed'
    WHEN 5 then 'pending'
    WHEN 6 then 'ended unexpectedly'
    WHEN 7 then 'succeeded'
    WHEN 8 then 'stopping'
    WHEN 9 then 'completed'
END as job_status
FROM (
    SELECT 
        h.step_name,  
        -- h.message, 
        h.run_status, 
        h.run_date, 
        h.run_time, 
        SUBSTRING(h.message, NULLIF(CHARINDEX('Execution ID: ', h.message),0)+14 ,PATINDEX('%[^0-9]%',SUBSTRING(h.message, NULLIF(CHARINDEX('Execution ID: ', h.message),0)+14 ,20))-1) ExecutionId
    FROM MSDB.DBO.SYSJOBHISTORY h) history
LEFT JOIN 
SSISDB.CATALOG.EXECUTIONS ex on ex.execution_id = history.ExecutionId
WHERE project_name = '<ssisdb_project_name_here>'

它具有许多列,您可以通过在select中替换*来忽略它们。重要的部分是将MSDB.DBO.SYSJOBHISTORYMSDB.DBO.SYSJOBHISTORY连接起来。

此外,这适用于SSIS的项目部署模式而不是包部署模式。