【问题标题】:SSIS: How to fix warning "the output column is not subsequently used" from ADO NET SourceSSIS:如何修复来自 ADO NET 源的警告“输出列未随后使用”
【发布时间】:2016-03-24 00:34:14
【问题描述】:

我正在编写一个 SSIS 包来获取一些文本数据,将其与 SQL Server 中表中的字段连接,然后将数据插入到表中。我正在使用 SQL Server Data Tools 2015 和 SQL Server 2014。

我已经配置了一个带有 ADO NET 连接到数据库的连接管理器。在这个特定的数据流组件中,我有一个 ADO NET 源,它突出显示了该数据库中的一个表。我获取表数据,对其进行排序,然后进行合并连接。我只需要来自该 ADO NET 源的 Id 和 Field1。为了便于讨论,假设它也有 Field2 和 Field3。

我在运行作业时收到 Field2 和 Field3 的以下警告:

[SSIS.Pipeline] 警告:输出“ADO >NET Source Output”(42) 和组件“ADO NET Source”(34) 上的输出列“Field2”(45) 随后未在数据流中使用任务。删除这个未使用的输出列可以提高>数据流任务的性能。

我有很多数据正在处理,所以如果可以避免的话,我不希望将这些数据带入内存。我假设要走的路是通过删除输出列从 ADO NET 源中删除它。但是,当我双击 ADO NET Source 并选择 Columns 时,我会看到左侧为 External Column 而右侧为 Output Column 的表格。当我右键单击这些列映射之一时,上下文菜单中的任何选项均未启用(剪切、复制、粘贴、删除)

当我进入高级编辑器视图时(通过右键单击 ADO NET 源并选择显示高级编辑器),然后导航到列映射选项卡。我删除了不需要的列的映射并选择确定。当我再次打开高级编辑器时,映射再次显示,就好像它们没有被删除一样。此外,当我转到输入和输出属性并选择“删除列”时,我收到以下错误:

无法删除该列。该组件不允许>从此输入或输出中删除列。 管道组件已返回 HRESULT 错误代码 0xC0208018

有谁知道如何减少来自 ADO NET 源的数据?

【问题讨论】:

    标签: c# sql-server ssis ado.net


    【解决方案1】:

    所以你在这里几乎没有选择:

    • 在“数据源”任务中,您可以选择 SQL 命令作为数据访问模式并制作 SQL 命令,该命令只会选择您所追求的列。您也可以在此处应用排序。

      • 在源数据库中创建一个视图,其中仅包含您在 SSIS 流程中需要的列,并在数据源任务中引用此视图

    第二个选项允许你只传递你之后的列,但你仍然需要应用排序。

    第一个选项将允许您对数据库中的记录进行排序,这是更可取的方式,您也可以在高级编辑器中设置排序选项,这意味着您不需要使用排序任务。但是,您最终会得到必须维护的嵌入式 SQL。我认为您可以在此步骤中使用存储过程,这将允许您将维护移至数据库并在需要时重用代码。

    【讨论】:

    • 当我取消选中排序中的“直通”列时,它仍然给我警告。 SQL 命令或视图似乎是要走的路。
    • 你是对的,取消选中并不能解决你原来的问题。
    【解决方案2】:

    您必须通过编写 SQL 来删除不需要的列,而不是在源中选择表本身。当您选择表格时,它会显示表格中的所有列作为源/输入。因此,编写一个 SQL 查询以仅获取您需要的那些列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2013-06-17
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      相关资源
      最近更新 更多