Как регистрировать сведения о каждом контейнере и задаче в таблице в SSIS

У меня есть пакет, который содержит несколько контейнеров, и в каждом контейнере есть несколько задач, как показано ниже.

введите здесь описание изображения

во время выполнения пакета мне нужно регистрировать каждый контейнер и сведения о задаче в таблице, как показано ниже.

LogID  Container        Task                        Status   Error                                       LoggedOn
1      SEQ - Customer   truncate customer table     SUCCESS                                              2015-03-31 02:22:50.267
2      SEQ - Customer   create temp table to store  SUCCESS                                              2015-03-31 02:22:50.267
3      SEQ - Customer   DF - Loading Customers      SUCCESS                                              2015-03-31 02:22:50.267
4      SEQ - Customer   Validating Customers        FAILED   Failed to convert from varchar to bigint    2015-03-31 02:22:50.267

Если какая-либо ошибка возникает в какой-либо конкретной задаче, она должна регистрировать описание ошибки в столбце ошибок в таблице. Пожалуйста, помогите мне, как добиться этого с помощью обработчиков событий или регистрации в ssis.


person Ram Das    schedule 31.03.2015    source источник
comment
Это широкая тема. Что вы пробовали и где вы застряли?   -  person Tab Alleman    schedule 31.03.2015
comment
Я думаю, что делать с обработчиками событий OnPostExecute, и в этом я могу регистрировать только сведения о пакете и задаче, но не сведения о контейнере. У вас есть идеи, как этого добиться? таблица должна иметь всю информацию, такую ​​​​как пакет, контейнер, задача   -  person Ram Das    schedule 01.04.2015
comment
У каждого объекта SSIS есть обработчики событий. Если вам нужно перейти на уровень задачи, поместите обработчик события в событие OnError каждой задачи. Для тех, которые не ошибаются, вы можете использовать обработчик PostExecute для каждой задачи.   -  person Tab Alleman    schedule 01.04.2015
comment
есть ли у нас способ сделать все это простым способом.   -  person Ram Das    schedule 01.04.2015
comment
Ни один, о котором я знаю.   -  person Tab Alleman    schedule 01.04.2015


Ответы (1)


Я получил это с помощью обработчиков событий OnPreExecute, OnError. Я выбрал это для обработчиков событий на уровне пакета и создал одну переменную :: Container(string). Выберите пакет и сгенерируйте эти два обработчика событий.

Используется следующий скрипт в Execute SQL Task-->OnPreExecute Event.

SourceDescription-- Input
PackageName-- Input
Container-- Input
SourceName-- Input
Container-- Output

DECLARE @TaskType VARCHAR(500),@Package VARCHAR(500),@Container VARCHAR(500),@Task varchar(500)
SELECT @TaskType = ?,@Package =?,@Container= ?,@Task = ?

IF(@TaskType ='Sequence Container')
BEGIN
    SET @Container = @Task
END
ELSE IF(@Package <>@Task)
BEGIN
    INSERT INTO LogTable(Package,Container,Task,Status)
    SELECT @Package,@Container,@Task,'SUCCESS'
END

SET ? = @Container

и ниже скрипт в событии OnError

SourceDescription-- Input
PackageName-- Input
Container-- Input
SourceName-- Input
ErrorDescription--Input

DECLARE @TaskType VARCHAR(500),@Package VARCHAR(500),@Container VARCHAR(500),@Task varchar(500),@Error VARCHAR(1000)
SELECT @TaskType = ?,@Package =?,@Container= ?,@Task = ?,@Error=?

IF(@TaskType ='Sequence Container')
BEGIN
    SET @Container = @Task
END
ELSE IF(@Package <>@Task)
BEGIN
    INSERT INTO LogTable(Package,Container,Task,Status,Error_Desc)
    SELECT @Package,@Container,@Task,'FAILED',@Error
END
person Ram Das    schedule 02.04.2015