Вы можете зафиксировать изменение состояния задачи с помощью обработчиков событий служб SSIS.Для этого щелкните на самой задаче, а затем на вкладке Event Handlers
в верхней части окна времени разработки.Откроется пустое окно с синей ссылкой в середине страницы, как показано ниже:
![Control-Flow level Task Event Handles](https://i.stack.imgur.com/FC0z0.png)
Прежде чем нажать на синюю ссылку, выберитеопределенный обработчик событий, который вы хотите обработать:
![enter image description here](https://i.stack.imgur.com/cLKLH.png)
Отсюда вы можете выполнять определенные задачи.Например, вы можете запустить почтовую задачу SMTP в обработчике событий OnError, чтобы отправить уведомление по электронной почте об ошибке задачи.Или вы можете запустить задачу «Выполнение SQL» в обработчике событий OnPostExecute, чтобы отправить данные в базу данных после завершения задачи.
Я думаю, что для вашей конкретной проблемы (как получить время выполнения для задачи) выпотребуются два обработчика событий:
- OnPreExecute : захват значения системного времени и даты с помощью GETDATE () и запись его в таблицу SQL как SequenceContainerTaskNameStartTs
- OnPostExecute : захватить системное значение даты и времени с помощью GETDATE () и записать его в таблицу SQL как SequenceContainerTaskNameEndTs
, где 'Ts' обозначает TimeStamp.
Затем вы можете рассчитать время выполнения с помощью функции DATEDIFF () и указать интервал времени (например, секунды, минуты, часы и т. Д.).Это значение может быть либо сохранено в отдельном поле таблицы (т. Е. SequenceContainerRunTime), либо просто сгенерировано на лету в SQL SELECT.
Подробнее о обработчиках событий служб SSIS читайте здесь:
Обработчики событий служб Integration Services (SSIS)