我正在编写一个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的数据?
答案 0 :(得分:1)
所以你在这里几乎没有选择:
在数据源任务中,您可以选择SQL Command作为数据访问模式,并制作SQL命令,该命令仅选择您之后的列。你也可以在这里申请排序。
第二个选项允许您仅传递您所在的列,但仍需要应用排序。
第一个选项允许您对数据库中的记录进行排序,这是更好的方法,您也可以在高级编辑器中设置排序选项,这意味着您不需要使用排序任务。但是,您最终必须使用必须维护的嵌入式SQL。我认为您可以在此步骤中使用存储过程,这将允许您将维护移动到数据库并在需要时重用代码。
答案 1 :(得分:0)
您必须通过编写SQL而不是在Source中选择表本身来删除不需要的列。选择表时,它会将表中的所有列作为源/输入。因此,编写SQL查询以仅获取所需的列。