【问题标题】:How to log each container and task details into a table in SSIS如何将每个容器和任务详细信息记录到 SSIS 中的表中
【发布时间】:2015-03-31 07:43:35
【问题描述】:

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

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

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

【问题讨论】:

  • 这是一个广泛的话题。你尝试过什么,你在哪里卡住了?
  • 我正在考虑使用 OnPostExecute 事件处理程序,在此我只能记录包和任务详细信息,但不能记录容器详细信息。你知道如何实现这一目标吗?表应该包含所有信息,如包、容器、任务
  • 每个 SSIS 对象都有事件处理程序。如果您需要深入到任务级别,请在每个任务的 OnError 事件中放置一个事件处理程序。对于那些没有出错的,你可以使用每个任务的 PostExecute 处理程序。
  • 我们有没有办法以任何简单的方式完成所有这些工作。
  • 我不知道。

标签: ssis business-intelligence ssis-2012 msbi


【解决方案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

【讨论】:

    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多