我正在将一组数据写入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
我试过了:
我迷失了,因为我不知道如何更改任何可能帮助我避免截断的其他属性
答案 0 :(得分:1)
您是否先创建SSIS部分然后更改SQL表中列的大小?如果是这样,您可能只需删除并重新创建OLE DB源即可重置元数据。
我还找到了这个链接:http://www.sqlservercentral.com/Forums/Topic927634-364-1.aspx
使用SSIS和源或目标元数据更改时,SSIS不会重置元数据,而是删除已更改的列,并在列表末尾添加新的列。在发生多次更改后,这会导致包装混乱。
要重置数据源上的元数据,请将源更改为没有匹配列名的表或查询,然后查看数据源中的列。这将删除并重新创建元数据。然后将源切换回您尝试刷新元数据的更改源,并再次查看列。这将完全重新创建源的元数据。
对于目标,将目标更改为没有匹配列名的目标,然后查看映射列。这将删除并重新创建元数据。然后切换回新的或更改的目标并查看映射的列。这有效地重置了元数据。
答案 1 :(得分:0)
要强制它提供40个字符的列,请使用派生列转换并将表达式修改为:
(DT_WSTR,40)[FLAGVOEMPLOYEE]
我希望这有帮助,如果确实如此,请标记我的答案,以便它也能使其他人受益!