我正在使用Visual Studio 2012(Shell)创建一个SSIS包,它将平面文件导入SQL Server数据库表。
我有一个平面文件源和一个OLE DB目标,其间有数据转换组件。
我使用数据转换工具将我的所有列从Source转换为Unicode字符串[DT_WSTR],因此我不会将unicode转换为非unicode错误。
我保留了数据转换组件给列的默认输出别名,这只是原始的输入列名称,前面添加了“Copy of”字样。
我有超过200列。当我双击我的目标组件并转到映射我的列时,我看到所有原始列名称首先显示在可用列的下拉列表中,然后当我向下滚过前200个原始列名称时,我终于到达我的转换列名称(说明副本的那些)。
我不知道我之前是怎么做的,但我要做的就是按下向下箭头键两次,它会从“第0列”切换到“第0列的副本”所以我基本上能够选项卡直通并快速映射列。 (选项卡,制表符,向下箭头键,向下箭头键并重复)。
现在由于某种原因,我必须按下向下箭头键超过200次以通过所有原始列名称,然后才能选择转换后的列名称,这将非常耗时(并可能导致RSI)。
我想知道我是否可以执行以下任一操作:
1)使我在映射OLE DB目标中的列时,只有转换的列名显示在可用的输入列中。
或
2)弄清楚如何在选择“输入”列时只按两次向下箭头键,然后它将从原始列名称切换到转换后的列名称(无需按下200以上的向下箭头键)到达转换列名称的时间)。
答案 0 :(得分:2)
我总是要确保要输出到表的元数据列与目标列具有相同的名称,手动匹配具有不同名称列的列太容易出错。相同的名称意味着您只需右键单击映射并按名称选择映射。有几种方法可以解决这个问题:
第一个选项通过在名称后附加一个X来更改平面文件连接管理器中的列名称 - 它们不必与实际文件中的名称相同,因为它们都按列位置工作。然后在您的数据转换中,您可以从名称中删除“副本”和X,并将其称为您想要的。
第二个选项 - 在数据转换和OLE DB目标之间插入派生列任务。对于每个非'Copy of'列选择替换并将匹配的'Copy of'列添加到表达式。
第三个和我最喜欢的 - 在数据转换和OLE DB目标之间插入一个Union All任务。在Union All映射中,您可以通过编辑输出列名称字段重命名任何列,并且可以右键单击任何列以删除它。因此,您删除所有非'复制'列并重命名'复制'给出您需要的确切内容。使用Union All进行一次输入有点奇怪,但它有效。