Mat*_*zen 17 sql-server-2008 sql-server ssis windows-server
首先让我澄清一下,这不是一个重复的问题,也不是一个潜在的重复问题。我已经尝试对 StackOverflow 和 DBA Stack Exchange 上已经存在的这个问题的每一个变体实施每一个答案,但没有任何运气。
过去两天我一直在努力解决这个问题(每天大约工作 7 小时),即使在谷歌搜索这个问题之后,似乎没有其他人遇到我的问题的完全相同的变体。
在 SSIS 中,我试图从 CSV 文件中读取数据,并将其中的行插入到 OLE DB 数据库中。为此,我进行了有史以来最简单的设置,如下所示。
Flat File Source
- 读取 CSV 行。Derived Column
- 目前什么都不做(它只是为了试验)。Data Conversion
- 目前什么都不做(它只是为了试验)。OLE DB Destination
- 将行存储在数据库中。当我尝试运行它时,它停止在我的OLE DB 目标处执行并显示以下错误消息。
输入“OLE DB 目标输入”(51) 上的输入列“数量”(187) 出错。返回的列状态为:“由于潜在的数据丢失,无法转换该值。”。
失败 ( Amount
)的列当前的类型是DT_STR
。这似乎是我现在最相信的类型。
Flat File Connection
失败的列上使用“建议类型”功能。这使得它推荐Single byte signed int
数据类型。
Derived Column
将列转换为DT_I4
.
Data Conversion
将我的列的值转换为DT_I4
.
Data Conversion
.DT_STR
在源和目标中更改我的值的长度。
IMEX=1
添加到连接字符串。没运气。我的编程意识告诉我我被搞砸了。我从来没有因为这么简单的事情遇到过这么大的问题。
为什么我不能忽视“潜在”的数据丢失?至少可以说真的很令人沮丧。
这是一台安装了 SQL Server 2008 的 Windows Server 2008 R2 机器。机器本身通过 Windows Update 进行了全面更新。
Oli*_*ner 10
忽略错误
首先,您应该能够通过转到平面文件源、错误输出,然后将“截断”下的“失败组件”更改为“忽略错误”来忽略字符串截断。
更好的解决方案
真正的问题可能是 SSIS 管道内的字符串长度仍然是错误的,因为它在某个较早的时间点被初始化。
您可以通过双击平面文件源中的绿色箭头(或在派生列/数据转换之后)并选择“元数据”来确定是否是这种情况。在那里您可以看到管道内字段的长度。
如果经常看到元数据不再与源组件匹配,主要是通过向导创建平面文件源及其相应的连接。
我的建议是删除连接和平面文件源并重新创建它们,因为我还没有找到将管道元数据与源组件重新同步的方法。
小智 7
我遇到过几次,问题是导出/导入参数中的数据类型不匹配。首先要做的是通过右键单击源或目标,选择高级编辑器来检查这些参数。转到输入和输出属性并检查所有项目的该列的数据类型 - 外部、输出和输入。我通常在这里看到差异,通常一个是 Unicode (WSTR),另一个是 I4 或 DSTR。