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

9
我正在尝试使用导入向导从Excel中将数据导入到Sql Server中。在前几步中一切似乎都很好。向导能够读取Excel文件并正确识别列。但是,在实际运行过程的最后一步时,它会失败,并给出以下错误:
Error 0xc020901c: Data Flow Task 1: 在输出“Excel Source Output”(9)上有关“AlternateName”(24)的输出列存在错误。返回的列状态为:“文本被截断或一个或多个字符与目标代码页不匹配。”(SQL Server Import and Export Wizard)
Error 0xc020902a: Data Flow Task 1: 因截断而失败了“output column“AlternateName”(24)”,并且输出列“AlternateName”(24)的截断行处置指定截断故障。指定组件的指定对象发生了截断错误。(SQL Server Import and Export Wizard)
Error 0xc0047038: Data Flow Task 1: SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 组件“Source-Sheet1 $”(1)上的PrimeOutput方法返回错误代码0xC020902A。 当管道引擎调用PrimeOutput()时,该组件返回了失败代码。故障代码的含义由组件定义,但错误是致命的,并且管道停止执行。此前可能已发布有关故障的更多信息的错误消息。(SQL Server Import and Export Wizard)
列AlternateName具有最大数据长度为658个字符。目标表将列AlternateName定义为varchar(1000)。因此,我不确定为什么会出现此错误。但是,然后我注意到这个
我有一个预感这可能是导致问题的原因。但是,如何更改源列定义为varchar 255?
4个回答

10

你可能需要在向导中编写自己的查询,并将列强制转换为varchar(1000) - 我不确定这是否有效。或者,工作表有多大? 向导只会“向下查看”若干行(默认情况下为10000行,这是一个注册表设置)来确定数据类型和宽度。重新排序Excel文件,使最长的AlternateName值位于顶部。


1
谢谢!这个表格有超过2万行。我把AlternateName的第一个值设得很长,然后就可以了! - shashi
3
根据这里的一个答案,它只查看前8行。 - DOK
它只查看非常少的行,绝对不是10000行。我有一个不到100行的表格,无法正确导入。有趣的是,Flat File Source(而不是Excel)选项确实有一个对话框Advanced > Suggest Types > Number of rows,您可以在那里输入所需的任意行数。奇怪的是,在导入Excel时缺少此选项。(顺便说一下,您也不能将Excel表格直接转换为平面文件-我发现导入向导解析生成的CSV时也存在不同的问题)。 - Ande

4
我遇到了相同的问题,我发现一个解决方法是按照单元格长度从大到小对导致Excel文档出现问题的行进行排序,因为导入导出向导只检查前200行。重新排序后,导入导出向导会检测到更大的长度并将源列数据类型更改为LongText。

enter image description here


非常好。对我有用。我将最大值保留在顶部,并更改了列的数据类型。不错的技巧 :) - hims

0
SQLServer 默认只检查 Excel 数据表的前 8 行,并且估计列的类型和宽度。因此,您可以将默认设置更改为前 n 行,甚至删除限制,方法如下:
使用“regedit”命令打开 Windows 注册表。
在 Windows 注册表中转到以下路径:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\Excel

enter image description here

查找标题为此的关键字:

TypeGuessRows

双击它并将值更改为您想要的值。请注意,value=0将强制SQLServer检查整个Excel表。


0
我在将一个Excel文件(版本为97-2003)导入到2016 SQL服务器时遇到了同样的问题。我的Excel文件有10列,但其中2列具有大量字符数据(“描述”、“输出”),最多达到600个字符。当我按照名为“描述”的列对Excel进行排序时,就会再次显示像上面提到的截断错误,用于另一列(称为“输出”)也具有其行中的大量数据。即使我尝试根据“输出”列的最大行数从大到小排序,仍然会向我显示“描述”列的相同错误。此外,当我将该Excel导入到2008 SQL服务器时,在执行后没有任何错误。只有当我想将该文件导入到SQL Server 2016时才会出现错误。如果有人能解决我的问题,以便将该Excel文件导入到2016 SQL服务器中,我将不胜感激。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接