【发布时间】:2017-05-14 03:32:58
【问题描述】:
我正在为 Visual Studio 2013 和 SQL Server 2014 使用 SSDT。我正在使用 Excel 源和 OLE DB 目标将数据从 Excel 电子表格导入 SQL Server 表。我在 OLE DB 目标上收到此 String or binary data would be truncated. 错误。我检查了所有内容,我没有超过 255 个的 VARCHAR 字段,并且在 Excel 连接字符串中使用了 IMEX = 1。我尝试一次导入一个字段进行测试,但仍然出现相同的错误并且不确定列是否存在。
SSIS 错误:
[OLE DB 目标 [28]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。一个 发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录是 可用的。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“该语句已 终止。”。一个 OLE DB 记录可用。来源:“Microsoft SQL 服务器本机客户端 11.0" Hresult:0x80004005 描述:"字符串 否则二进制数据将被截断。”。
[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。这 组件“OLE DB 目标”(28) 上的 ProcessInput 方法失败 处理输入“OLE DB 目标”时出现错误代码 0xC0202009 输入” (59)。已识别的组件从 处理输入法。该错误是特定于组件的,但 错误是致命的,将导致数据流任务停止运行。
在此之前可能会发布带有更多信息的错误消息 关于失败。
【问题讨论】:
-
使用 Excel,您所看到的和得到的并不总是相同的,将数据导出到文本文件,然后将其导入新的 Excel 文件。确保不仅您不截断文本列,而且您的数字撤销在目的地上是正确的或更大的。和使用 Excel 时一样……祝你好运。这就是为什么我避免把它当作瘟疫,总是用文本文件代替。
-
之前我不得不强制它工作,只需将字段设置为 3000 或一些巨大的值,然后执行几个长度命令来查找数据长度并重试。
-
Excel 文件中某处的字段对于数据库表中的列来说太长了。没有简单的内置方法可以找到它。只是反复试验。
-
每当我从文件导入时,我都有一个比我的目标表更广泛的临时表。我使用暂存表导入没有错误,并使用暂存表和目标表之间的ETL来清理数据。特别是在 Excel 中,我遇到了隐藏字符的问题。
标签: sql-server excel ssis