我在SQL Server中部署了一个SSIS程序包,并且有3个不同的SQL Server代理作业以不同的步骤和时间表运行此程序包。
我的问题是:如果该包在Integration Services目录->报告中显示为失败,则其中一种执行方式是否可以识别出哪个运行该执行的工作,导致该包失败(不是通过从作业历史记录和包失败执行时间交叉检查失败时间)?
答案 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.SYSJOBHISTORY
与MSDB.DBO.SYSJOBHISTORY
连接起来。
此外,这适用于SSIS的项目部署模式而不是包部署模式。