SSIS OLE DB目标中的外部列长度不正确

时间:2016-11-29 16:45:52

标签: ssis oledb etl

我正在将一组数据写入SSIS中的SQL Server 2008表(Visual Studio 2008)。当我将我的数据集映射到OLE DB目标时,我得到一个截断错误,因为OLE DB目标列的长度为20.每个列都会发生这种情况,但我只会显示下面一列的样本。

这是SQL表定义中的列:

Column_name     Type        Length
FLAGVOEMPLOYEE  nvarchar    40

这是我传递到目的地的列的元数据(在数据路径编辑器中检查)作为输入:

Name            Data Type   Length
FlagVoEmployee  DT_WSTR     40

这是高级编辑器&gt;中的列属性。 <输入和输出属性> OLE DB目的地输入&gt;外部列

Name            DataType                    Length
FLAGVOEMPLOYEE  Unicode string [DT_WSTR]    20

我试过了:

  • 手动更改长度属性,但会自动恢复为20
  • 删除路径并重新创建
  • 删除OLE DB目标并再次创建
  • 将数据访问模式更改为正常或快速加载
  • 取消映射列并重新映射

我迷失了,因为我不知道如何更改任何可能帮助我避免截断的其他属性

2 个答案:

答案 0 :(得分:1)

您是否先创建SSIS部分然后更改SQL表中列的大小?如果是这样,您可能只需删除并重新创建OLE DB源即可重置元数据。

我还找到了这个链接:http://www.sqlservercentral.com/Forums/Topic927634-364-1.aspx

使用SSIS和源或目标元数据更改时,SSIS不会重置元数据,而是删除已更改的列,并在列表末尾添加新的列。在发生多次更改后,这会导致包装混乱。

要重置数据源上的元数据,请将源更改为没有匹配列名的表或查询,然后查看数据源中的列。这将删除并重新创建元数据。然后将源切换回您尝试刷新元数据的更改源,并再次查看列。这将完全重新创建源的元数据。

对于目标,将目标更改为没有匹配列名的目标,然后查看映射列。这将删除并重新创建元数据。然后切换回新的或更改的目标并查看映射的列。这有效地重置了元数据。

答案 1 :(得分:0)

要强制它提供40个字符的列,请使用派生列转换并将表达式修改为:

(DT_WSTR,40)[FLAGVOEMPLOYEE]

我希望这有帮助,如果确实如此,请标记我的答案,以便它也能使其他人受益!

相关问题