0

我有一个包含多个容器的包,每个容器中有多个任务,如下所示。

在此处输入图像描述

在包执行期间,我需要将每个容器和任务详细信息记录到如下表中。

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 来实现这一点。

4

1 回答 1

1

我通过使用 OnPreExecute、OnError 事件处理程序得到了这个。我已经在包级别选择了这个事件处理程序并创建了一个变量 :: Container(string)。选择包并生成这两个事件处理程序。

在执行 SQL 任务-->OnPreExecute 事件中使用以下脚本。

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
于 2015-04-02T06:03:30.963 回答