26

我有一个从 Excel 文档导入到数据库表的 SSIS 包。我收到以下错误:

[Excel Source [1]] Error: There was an error with output column "ShipTo" (47) on output
"Excel Source Output" (9). The column status returned was: "The value could not be 
converted because of a potential loss of data.".

[Excel Source [1]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The
"output column "ShipTo" (47)" failed because error code 0xC0209072 occurred, and the
error row disposition on "output column "ShipTo" (47)" specifies failure on error. An
error occurred on the specified object of the specified component.  There may be error
messages posted before this with more information about the failure.

[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method
on component "Excel Source" (1) returned error code 0xC0209029.  The component returned
a failure code when the pipeline engine called PrimeOutput(). The meaning of the
failure code is defined by the component, but the error is fatal and the pipeline 
stopped executing.  There may be error messages posted before this with more
information about the failure.

我已经阅读并找到了确保我的数据类型匹配的文章,并且我已经做到了。在 Excel 文档中,有 184 行,在这些错误 (shipto) 中列出的列中,它们都具有相同的值,即“全部”。我上次运行时遇到了这个问题,但只有 4 行有“全部”,所以我只是手动输入了这些值,但这一次效率不高。

在目标表上,ShipTo 列是 Varchar(20),所以我认为大小不是问题,因为它是以下三件事之一:1 位数字、2 位数字或单词 All。

有没有人有任何我可以尝试的其他想法?任何帮助是极大的赞赏。感谢任何可以提供任何帮助的人。

4

5 回答 5

29

当你第一次设置这个包时,我猜想一个或两个数字是 ShipTo 列中的第一个值。您从 Excel 读取的包为该输入字段选择了数字类型,并且“ALL”一词使包失败,因为该字段的输入规范是数字。有几种方法可以预先解决这个问题,但事后解决它,最简单的方法是右键单击 Excel 源并选择显示高级编辑器... 从那里选择显示输入和输出属性的选项卡。在该对话框的输入和输出部分的最顶部,找到 ShipTo 列。您必须深入挖掘才能找到它。将 DataType 设置为“string [DT_STR]”,长度设置为 20。

单击确定,然后尝试再次运行您的包。

于 2012-11-19T18:29:01.653 回答
2

对我来说,刚刚从 SSIS 中删除了 OLE DB 源并再次添加。工作!

于 2015-01-07T01:05:39.523 回答
2

这可能不是最好的方法,但如果一切都失败了,您可以忽略转换错误。我的问题是空值不能正确转换,所以我只是忽略了错误,日期以日期形式出现,空值以空值形式出现,因此没有数据质量问题——并非总是如此。为此,请右键单击您的源,单击编辑,然后单击错误输出。转到让您感到悲伤的列,然后在错误下将其更改为忽略失败。

于 2018-11-09T19:43:32.830 回答
1

我有同样的问题,单列中有多个数据类型值,包只加载数值。保持所有更新为空。

解决方案

要解决此问题,更改 excel 数据类型是解决方案之一。在 Excel 中复制列数据并粘贴到不同的文件中。删除该列并将新列作为文本数据类型插入,并将复制的数据粘贴到新列中。

现在在 ssis 包中删除并重新创建 Excel 源表和目标表,将列数据类型更改为 varchar

这将起作用。

于 2014-12-10T12:57:26.697 回答
1

试试这个,因为它对我有用:

SSIS - 由于潜在的数据丢失,无法转换该值

于 2017-02-23T13:29:11.007 回答