83

我正在尝试将一个大的 CSV 文件(几个 gigs)插入SQL Server,但是一旦我完成Import Wizard并最终尝试导入该文件,我会收到以下错误报告:

  • 执行(错误)消息

错误 0xc02020a1:数据流任务 1:数据转换失败。列“标题”的数据转换返回状态值 4 和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。

( SQL Server Import and Export Wizard)

错误 0xc020902a:数据流任务 1:“源 - Train_csv.Outputs [平面文件源输出].Columns [“标题”]”失败,因为发生了截断,并且“源 - Train_csv.Outputs [平面文件源”上的截断行处置Output].Columns["Title"]" 指定截断失败。指定组件的指定对象发生截断错误。

( SQL Server Import and Export Wizard)

错误 0xc0202092:数据流任务 1:处理数据行 2 上的文件“C:\Train.csv”时出错。

( SQL Server Import and Export Wizard)

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

( SQL Server Import and Export Wizard)

我创建了表格以首先将文件插入,并将每一列设置为保存 varchar(MAX),所以我不明白我怎么还能遇到这个截断问题。我究竟做错了什么?

4

6 回答 6

199

在 SQL Server 导入和导出向导中,您可以在Advanced选项卡中调整源数据类型(如果创建新表,这些将成为输出的数据类型,否则仅用于处理源数据)。

数据类型与 MS SQL 中的数据类型截然不同,而不是VARCHAR(255)DT_STR,并且输出列宽可以设置为255. 因为VARCHAR(MAX)DT_TEXT

因此,在“数据源”Advanced选项卡中,将任何有问题的列的数据类型从“更改DT_STR为” DT_TEXT(您可以选择多个列并一次全部更改)。

导入和导出向导 - 数据源 - 高级

于 2013-09-03T20:04:03.370 回答
2

这个答案可能并不普遍适用,但它解决了我在导入小文本文件时遇到的这个错误。平面文件提供程序基于源中固定的 50 个字符的文本列导入,这是不正确的。重新映射目标列的次数不会影响该问题。

要解决此问题,在平面文件提供程序的“选择数据源”中,选择文件后,输入列列表下方会出现“建议类型..”按钮。点击此按钮后,即使未对正在使用的对话框进行任何更改,平面文件提供程序也会重新查询源 .csv 文件,然后正确确定源文件中字段的长度。

完成此操作后,导入继续进行,没有其他问题。

于 2016-01-21T17:13:47.187 回答
0

我认为这是一个错误,请应用解决方法,然后重试:http: //support.microsoft.com/kb/281517

此外,进入高级选项卡,并确认目标列长度是否为 Varchar(max)。

于 2013-09-03T19:48:33.677 回答
0

高级编辑器没有解决我的问题,而是我被迫通过记事本(或您最喜欢的文本/xml 编辑器)编辑 dtsx 文件并手动将属性中的值替换为

length="0" dataType="nText"(我使用的是 unicode)

在以 text/xml 模式编辑之前,请务必备份 dtsx 文件。

运行 SQL Server 2008 R2

于 2015-06-16T11:59:34.470 回答
0

转到高级选项卡----> 列的数据类型---> 在这里将数据类型从 DT_STR 更改为 DT_TEXT 和列宽 255。现在您可以检查它是否可以正常工作。

于 2015-06-19T21:30:24.213 回答
0

问题:Jet OLE DB 提供程序读取注册表项以确定要读取多少行来猜测源列的类型。默认情况下,此键的值为 8。因此,提供程序扫描源数据的前 8 行以确定列的数据类型。如果任何字段看起来像文本并且数据长度超过 255 个字符,则该列将被键入为备注字段。因此,如果源的前 8 行中没有长度大于 255 个字符的数据,Jet 就无法准确确定数据类型的性质。由于导出工作表中数据的前 8 行长度小于 255,因此考虑到源长度为 VARCHAR(255) 并且无法从具有更多长度的列中读取数据。

修复:解决方法就是对评论栏进行降序排序。从 2012 年开始,我们可以更新导入向导中高级选项卡中的值。

于 2015-09-01T06:56:18.883 回答