SSIS数据转换为OLE DB目标列映射

时间:2015-07-23 21:03:43

标签: sql-server visual-studio-2012 ssis

我正在使用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以上的向下箭头键)到达转换列名称的时间)。

enter image description here

1 个答案:

答案 0 :(得分:2)

我总是要确保要输出到表的元数据列与目标列具有相同的名称,手动匹配具有不同名称列的列太容易出错。相同的名称意味着您只需右键单击映射并按名称选择映射。有几种方法可以解决这个问题:

第一个选项通过在名称后附加一个X来更改平面文件连接管理器中的列名称 - 它们不必与实际文件中的名称相同,因为它们都按列位置工作。然后在您的数据转换中,您可以从名称中删除“副本”和X,并将其称为您想要的。

第二个选项 - 在数据转换和OLE DB目标之间插入派生列任务。对于每个非'Copy of'列选择替换并将匹配的'Copy of'列添加到表达式。

第三个和我最喜欢的 - 在数据转换和OLE DB目标之间插入一个Union All任务。在Union All映射中,您可以通过编辑输出列名称字段重命名任何列,并且可以右键单击任何列以删除它。因此,您删除所有非'复制'列并重命名'复制'给出您需要的确切内容。使用Union All进行一次输入有点奇怪,但它有效。