SSIS:如何从ADO NET Source

时间:2016-03-24 00:34:14

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

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

我已经使用与数据库的ADO NET连接配置了连接管理器。在这个特定的数据流组件中,我有一个ADO NET Source,它突出显示该数据库中的表。我获取表数据,对其进行排序,然后进行合并连接。我只需要来自该ADO NET Source的Id和Field1。让我们说它也有Field2和Field3以供讨论。

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

  

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

我有很多我正在处理的数据,所以如果我可以避免,我宁愿不将这些数据存入内存。我认为这样做是通过删除输出列从ADO NET Source中删除它。但是,当我双击ADO NET Source并选择Columns时,我看到左边是External Column的表,右边是Output Column。当我右键单击其中一个列映射时,上下文菜单中的所有选项都没有启用(剪切,复制,粘贴,删除)

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

  

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

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

2 个答案:

答案 0 :(得分:1)

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

  • 在数据源任务中,您可以选择SQL Command作为数据访问模式,并制作SQL命令,该命令仅选择您之后的列。你也可以在这里申请排序。

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

第二个选项允许您仅传递您所在的列,但仍需要应用排序。

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

答案 1 :(得分:0)

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