我正在尝试使用导入向导将数据从excel导入到Sql Server。在第一步中,一切似乎都很好。该向导能够读取excel文件并正确识别列。但是在进程实际运行的最后一步中,它没有给出以下错误:
错误0xc020901c:数据流任务1:输出出错 输出“Excel源输出”(9)上的列“AlternateName”(24)。该 返回的列状态为:“文本被截断或一个或多个 目标代码页中没有匹配的字符。“。(SQL Server Import 和导出向导)
错误0xc020902a:数据流任务1:“输出列”AlternateName“ (24)“失败,因为发生了截断,截断行 处理“输出列”AlternateName“(24)”指定失败 截断。在指定的对象上发生截断错误 指定的组件。 (SQL Server导入和导出向导)
错误0xc0047038:数据流任务1:SSIS错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“Source”上的PrimeOutput方法 - Sheet1 $“(1)返回错误代码0xC020902A。返回组件 管道引擎调用PrimeOutput()时的失败代码。该 失败代码的含义由组件定义,但错误 是致命的,管道停止执行。可能有错误 此前发布的消息包含有关失败的更多信息。 (SQL Server导入和导出向导)
列AlternateName的最大数据长度为658个字符。目标表将AlternateName列定义为varchar(1000)。所以我不确定为什么我会收到这个错误。但后来我注意到了这个
我预感到这可能导致了这个问题。但是,如何更改定义为varchar 255的Source列?
答案 0 :(得分:7)
您可能需要在向导中编写自己的查询并将列转换为varchar(1000) - 我不是100%肯定会起作用。或者,表单有多大?该向导仅“向下看”这么多行(默认情况下为IIRC 10000,它是一个注册表设置)来确定数据类型和宽度。重新排序excel文件,以便最长的AlternateName值位于顶部。
答案 1 :(得分:3)
我遇到了同样的问题,我发现一个解决方法是对大的行进行排序,并根据从最大到最小的单元格长度导致Excel文档出现问题,因为导入导出向导只检查前200行。
使用行后,“导出导出向导”会检测更大的长度,并将“源列”数据类型更改为“LongText”。
答案 2 :(得分:0)
将Excel文件(版本97-2003)导入2016 SQL Server时遇到相同的问题。我的Excel文件有10列,但其中2列包含大字符数据(“ description”,“ output”),最多为600个字符。当我根据称为“ description”的列对excel进行排序时,出现上述截断错误再次为另一列(称为“输出”)显示,该列的行中数据也很大。即使我尝试根据“输出”列从最大到最小行进行排序,“描述”列也再次显示相同的错误。此外,当我将Excel导入2008 SQL Server时,执行后没有任何错误。错误只是在我要将文件导入到SQL Server 2016中时。如果有人解决了我的问题,以便将该excel文件导入到2016 SQL Server中,我将不胜感激。