使用“导入导出向导”将数据从Excel导入到Sql Server时,如何更改列的默认varchar 255?

时间:2011-09-15 15:24:04

标签: sql-server import-from-excel

我正在尝试使用导入向导将数据从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)。所以我不确定为什么我会收到这个错误。但后来我注意到了这个

enter image description here

我预感到这可能导致了这个问题。但是,如何更改定义为varchar 255的Source列?

3 个答案:

答案 0 :(得分:7)

您可能需要在向导中编写自己的查询并将列转换为varchar(1000) - 我不是100%肯定会起作用。或者,表单有多大?该向导仅“向下看”这么多行(默认情况下为IIRC 10000,它是一个注册表设置)来确定数据类型和宽度。重新排序excel文件,以便最长的AlternateName值位于顶部。

答案 1 :(得分:3)

我遇到了同样的问题,我发现一个解决方法是对大的行进行排序,并根据从最大到最小的单元格长度导致Excel文档出现问题,因为导入导出向导只检查前200行。

使用行后,“导出导出向导”会检测更大的长度,并将“源列”数据类型更改为“LongText”。

enter image description here

答案 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中,我将不胜感激。