首页 文章

尽管每列使用varchar(MAX),导入CSV文件时SQL Server中的错误

提问于
浏览
50

我正在尝试将大型CSV文件(几个演出)插入SQL Server,但是一旦我通过导入向导并最终尝试导入该文件,我会收到以下错误报告:

  • 执行(错误)消息错误0xc02020a1:数据流任务1:数据转换失败 . 列“” Headers “”的数据转换返回状态值4和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配 . ” . (SQL Server导入和导出向导)

  • 错误0xc020902a:数据流任务1:“源 - Train_csv.Outputs [平面文件源输出] .Columns [”Title“]”失败,因为发生截断,截断行处置“Source - Train_csv.Outputs [Flat File]源输出] .Columns [“Title”]“指定截断失败 . 指定组件的指定对象上发生截断错误 . (SQL Server导入和导出向导)

  • 错误0xc0202092:数据流任务1:在数据行2上处理文件“C:\ Train.csv”时发生错误 . (SQL Server导入和导出向导)

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

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

6 回答

  • 144

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

    数据类型与MS SQL中的数据类型非常不同,而不是 VARCHAR(255) 它是 DT_STR ,输出列宽度可以设置为 255 . 对于 VARCHAR(MAX) ,这是 DT_TEXT .

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

    Import and Export Wizard - Data Source - Advanced

  • 1

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

    要解决此问题,请在平面文件提供程序的"Choose a Data Source"中选择文件后,输入列列表下方会出现"Suggest Types.."按钮 . 点击此按钮后,即使没有对enusing对话框进行任何更改,Flat File提供程序也会重新查询源.csv文件,然后正确确定源文件中字段的长度 .

    完成后,导入继续进行,没有进一步的问题 .

  • 0

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

    此外,进入“高级”选项卡,确认目标列长度是否为Varchar(最大值) .

  • 0

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

    length="0" dataType="nText" (我正在使用unicode)

    在text / xml模式下编辑之前,请始终备份dtsx文件 .

    运行SQL Server 2008 R2

  • 0

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

  • 0

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

    修复:解决方案只是按降序对注释列进行排序 . 在2012年以后,我们可以在“导入”向导中更新“高级”选项卡中的值 .

相关问题