我有一个包含几个容器的包,每个容器都有多个任务,如下所示。
在程序包执行期间,我需要将每个容器和任务详细信息记录到如下表中。
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来实现此目的。
答案 0 :(得分: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