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

GMS*_*GMS 60 sql sql-server csv

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

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

  • 错误0xc020902a:数据流任务1:"源 - Train_csv.Outputs [平面文件源输出] .Columns ["Title"]"失败,因为发生了截断,截断行处置"Source - Train_csv.Outputs [Flat File Source]输出] .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),所以我不明白我怎么仍然有这个截断问题.我究竟做错了什么?

Har*_* CO 161

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

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

因此,在"数据源"选择中,在Advanced选项卡中,将任何违规列的数据类型更改DT_STRDT_TEXT(您可以选择多个列并一次更改所有列).

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

  • 我不得不将列更改为"DT_DATE","DT_NUMERIC"等.这是我在一段时间内完成的最乏味和烦人的事情.但它比创建一个包含所有varchar(50)列的新表更好.这真的没有用. (2认同)
  • 奇怪的是,如果我使用“建议类型...”并让它扫描所有6000行,它会更改所有列的长度值,大概是遇到的最高值,但错误仍然存​​在。对我而言,唯一的解决方法是将所有这些都更改为“ DT_TEXT”。一次找到一个令人讨厌的专栏真是花了很长时间。 (2认同)