9

我正在尝试使用导入向导将数据从 excel 导入 Sql Server。第一步似乎一切都很好。该向导能够读取 excel 文件并正确识别列。但是在该过程实际运行的最后一步中,它失败并给出以下错误:

错误 0xc020901c:数据流任务 1:输出“Excel 源输出”(9) 上的输出列“AlternateName”(24) 存在错误。返回的列状态为:“文本被截断或一个或多个字符在目标代码页中不匹配。”。(SQL Server 导入和导出向导)

错误 0xc020902a:数据流任务 1:“输出列“AlternateName”(24)”因发生截断而失败,并且“输出列“AlternateName”(24)”上的截断行处置指定了截断失败。指定组件的指定对象发生截断错误。(SQL Server 导入和导出向导)

错误 0xc0047038:数据流任务 1:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“Source - Sheet1$”(1) 上的 PrimeOutput 方法返回错误代码 0xC020902A。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。(SQL Server 导入和导出向导)

AlternateName 列的最大数据长度为 658 个字符。目标表的 AlternateName 列定义为 varchar(1000)。所以我不确定为什么会出现这个错误。但后来我注意到了这一点

在此处输入图像描述

我有一种预感,这可能是导致问题的原因。但是,如何更改定义为 varchar 255 的 Source 列?

4

4 回答 4

9

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

于 2011-09-15T15:50:55.840 回答
4

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

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

在此处输入图像描述

于 2016-01-22T08:23:13.927 回答
0

将 excel 文件(版本 97-2003)导入 2016 SQL 服务器时遇到同样的问题。我的 Excel 文件有 10 列,但其中 2 列具有最多 600 个字符的大字符数据(“描述”、“输出”)。当我根据名为“描述”的列对 excel 进行排序时,出现上述截断错误再次显示在其行中也包含大量数据的另一列(称为“输出”)。即使我尝试根据“输出”列从最大行到最小行排序,同样的错误也会显示给“描述”列。另外,当我将该excel导入2008 SQL server时,执行后没有任何错误。错误只是当我想将该文件导入 SQL Server 2016 时。

于 2019-12-30T12:20:35.883 回答
0

SQLServer 默认只检查前 8 行的 excel 数据并估计列类型和宽度。因此,您可以将默认设置更改为前 n 行,甚至可以删除这样的限制:

使用regedit命令打开 Windows 注册表。

转到 Windows 注册表中的此路径:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Jet\4.0\Engines\Excel

在此处输入图像描述

查找具有此标题的键:

TypeGuessRows

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

于 2021-11-27T13:22:57.220 回答