1

我希望能够做到以下几点:

  • 逐行导入平面文件
  • 对每一行的列值进行条件拆分
  • 如果我检测到一个有效值,我想继续这一行
  • 如果在任何情况下我检测到一个不可能的值,我想使组件失败,因此工作流停止并且我得到一个错误

示例:我有一个包含三列的文件(“类型”、“值”、“消息”)

我想使用平面文件目标逐行导入该文件。然后我想做有条件的拆分。如果“类型”列的值为“1”,我想将该行写入我的目的地。如果类型是“2”或“3”,我想忽略它们。但是,如果它的“A”或“0”我想使组件失败。

除了“失败”部分,我什么都有。我将最后一个条件(“列不是 1,2 或 3”)的输出配置为“失败组件”,但它实际上并未使组件失败。

4

2 回答 2

7

将脚本组件添加到数据流(作为目标)并将其链接到您想要强制包失败的条件拆分。

在脚本组件内添加

    bool pbCancel = false;
    this.ComponentMetaData.FireError(100, "Script Component", "Data Error <type message here>", "", 0, out pbCancel);

脚本组件本身会成功,但是数据流任务会失败,应该会导致打包失败

于 2011-08-16T13:35:18.263 回答
0

我只是会添加一些我搜索了一段时间并最终独自找到的东西......

就像 Daryl 说的,如果你只是使用ComponentMetaData.FireError()方法,你会在执行结果中看到错误,但脚本组件不会失败。数据流任务将失败,但仅在完成工作之后(因此可能在一些 INSERT 和/或 UPDATE 之后)结束。如果要完全停止数据流执行,可以这样做:

  • 使用 2 个输出对失败条件 创建条件拆分:
    1. 线路正常
    2. 不符合条件的行
  • 在第二个输出上,运行触发错误的脚本,并为每一行提供一条清晰的消息。脚本组件必须是转换,而不是目的地,才能有输出。
  • 在脚本组件之后,添加一个OLE DB 命令,该命令会在您的目标基础上引发 SQL 错误: RAISERROR(N'At least one line not configured have been found',16,1)
  • 最后,在 OLE DB 命令之后,使用Union All组件将条件拆分的第一个输出(行 OK)与 OLE DB 命令的输出连接起来。

这样,您将能够为不满足条件的每一行引发错误,并在至少发生一个错误时在插入记录之前停止数据流任务。

于 2016-06-06T14:11:48.910 回答