在我的主包中,在发生错误事件处理程序中,触发了一个子包 Logging 。 此程序包将触发他/她自己的子程序包: SendMail 。 Sendmail 对SSISDB执行查询。该查询收集所有具有最新execution_id的错误。将结果写入平面文件。 然后将平面文件附加到电子邮件中并发送给我。
但是,如果我在SSDT中运行此程序,则效果很好。在服务器上运行此文件时,该文件为空。该查询正在寻找导致最新执行的错误。但是,如果我更改查询以使其查找较旧的执行,则一切运行正常。 在我尝试收集错误时,似乎还没有将错误写入数据库。但是,仅使查询等待5秒钟并不意味着我得到了结果。
我能以某种方式确保将错误在我需要的那一刻写入SSISDB吗?
这是我用来从SSISDB中提取错误的查询。当我将(SELECT MAX(execution_id) FROM SSISDB.catalog.executions)
更改为上一个execute_id时出现错误时,一切正常。 (但我看到上次运行的错误)
SELECT distinct
cast(message_time as datetime2) as message_time
,cast(REPLACE(REPLACE(REPLACE(REPLACE(messaGE, CHAR(13) + CHAR(10), ' ... '),
CHAR(10) + CHAR(13), ' ... '), CHAR(13), ' '), CHAR(10), ' ... ') as nvarchar(400)) AS MESSAGE
,cast(execution_path as nvarchar(400)) as execution_path
FROM (
SELECT em.*
FROM catalog.event_messages em
WHERE em.operation_id = (SELECT MAX(execution_id) FROM SSISDB.catalog.executions)
AND event_name NOT LIKE '%Validate%'
)q
WHERE event_name = 'OnError'