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

Mat*_*zen 17 sql-server-2008 sql-server ssis windows-server

首先让我澄清一下,这不是一个重复的问题,也不是一个潜在的重复问题。我已经尝试对 StackOverflow 和 DBA Stack Exchange 上已经存在的这个问题的每一个变体实施每一个答案,但没有任何运气。

过去两天我一直在努力解决这个问题(每天大约工作 7 小时),即使在谷歌搜索这个问题之后,似乎没有其他人遇到我的问题的完全相同的变体。

我想做什么?

在 SSIS 中,我试图从 CSV 文件中读取数据,并将其中的行插入到 OLE DB 数据库中。为此,我进行了有史以来最简单的设置,如下所示。

  1. Flat File Source - 读取 CSV 行。
  2. Derived Column - 目前什么都不做(它只是为了试验)。
  3. Data Conversion - 目前什么都不做(它只是为了试验)。
  4. OLE DB Destination - 将行存储在数据库中。

当我尝试运行它时,它停止在我的OLE DB 目标处执行并显示以下错误消息。

输入“OLE DB 目标输入”(51) 上的输入列“数量”(187) 出错。返回的列状态为:“由于潜在的数据丢失,无法转换该值。”。

失败 ( Amount)的列当前的类型是DT_STR。这似乎是我现在最相信的类型。

我尝试了什么?

  • 我已尝试在Flat File Connection失败的列上使用“建议类型”功能。这使得它推荐Single byte signed int数据类型。
    • 停在我的平面文件源
    • 错误数据转换失败。列“金额”的数据转换返回了状态值 2 和状态文本“由于潜在的数据丢失,无法转换该值。”。
  • 我试过使用 Derived Column将列转换为DT_I4.
    • 停在我的派生列
    • 错误数据转换失败。列“金额”的数据转换返回了状态值 2 和状态文本“由于潜在的数据丢失,无法转换该值。”。
  • 我试过使用 Data Conversion将我的列的值转换为DT_I4.
    • 停在我的Data Conversion.
    • 错误数据转换失败。列“金额”的数据转换返回了状态值 2 和状态文本“由于潜在的数据丢失,无法转换该值。”。
  • 我试过DT_STR在源和目标中更改我的值的长度。
    • 停在根据设置在源或目的地。
  • 我尝试使用 Excel 源连接器进行连接,而不是使用不使用IMEX=1添加到连接字符串。没运气。

我的编程意识告诉我我被搞砸了。我从来没有因为这么简单的事情遇到过这么大的问题。

为什么我不能忽视“潜在”的数据丢失?至少可以说真的很令人沮丧。

我的系统

这是一台安装了 SQL Server 2008 的 Windows Server 2008 R2 机器。机器本身通过 Windows Update 进行了全面更新。

Oli*_*ner 10

忽略错误

首先,您应该能够通过转到平面文件源、错误输出,然后将“截断”下的“失败组件”更改为“忽略错误”来忽略字符串截断。

更好的解决方案

真正的问题可能是 SSIS 管道内的字符串长度仍然是错误的,因为它在某个较早的时间点被初始化。

您可以通过双击平面文件源中的绿色箭头(或在派生列/数据转换之后)并选择“元数据”来确定是否是这种情况。在那里您可以看到管道内字段的长度。

如果经常看到元数据不再与源组件匹配,主要是通过向导创建平面文件源及其相应的连接。

我的建议是删除连接和平面文件源并重新创建它们,因为我还没有找到将管道元数据与源组件重新同步的方法。

  • 不过,这不属于“截断”。我已经试过了。 (2认同)

小智 7

我遇到过几次,问题是导出/导入参数中的数据类型不匹配。首先要做的是通过右键单击源或目标,选择高级编辑器来检查这些参数。转到输入和输出属性并检查所有项目的该列的数据类型 - 外部、输出和输入。我通常在这里看到差异,通常一个是 Unicode (WSTR),另一个是 I4 或 DSTR。