借此XLS文件
然后我保存这个XLS文件为CSV,然后用文本编辑器打开它。 这是我所看到的:
Col1,Col2,Col3,Col4,Col5,Col6,Col7
1,ABC,"AB""C","D,E",F,03,"3,2"
我看到,在列C中的双引号字符被存储为AB""C
,该列的值被装入用报价和在数据中的双引号字符用2个引号字符替换以指示该引用在数据内发生并且不终止所述列的值。 我还看到,对于G列,值3,2
,被封闭在引号,以便它是清楚的是,逗号数据内发生,而不是指示一个新列。 到现在为止还挺好。
我有点惊讶的是,所有的列值都没有加引号,但即使这似乎合理确定,当我以为EXCEL仅指定列delimieters当像commad或DBL引号字符特殊字符的数据存在。
现在,我尝试使用SQL Server导入CSV文件。 请注意,我指定一个双引号字符作为文本限定符字符。
和命令字符作为列分隔符。 但是请注意,SSIS进口3列错误,例如,未转换的两个连续的双引号字符作为双引号字符的单occurence。
我有什么做的就是Excel和SSIS相处?
一般人通过使用列分隔符chactacters将不太可能在数据发生,但是这不是一个真正的解决办法回避的问题。
我发现,如果我从这个修改文件
Col1,Col2,Col3,Col4,Col5,Col6,Col7
1,ABC,"AB""C","D,E",F,03,"3,2"
......这样的:
Col1,Col2,Col3,Col4,Col5,Col6,Col7
1,ABC,"AB"C","D,E",F,03,"3,2"
即删除C列的值连续两次报价,该数据是否正确,但是,这是一个有点混乱给我。 首先,如何SSIS确定B和C之间的双引号不会终止该列的值? 难道是因为下面的字符不是一个逗号列分隔符或行分隔符(CRLF)? 为什么不Excel导出这样说?
根据维基百科 ,这里有一对夫妇一个CSV文件的特质:
含有换行符字段(CRLF),双引号,和逗号应包含在双引号。 例如:
“AAA”, “B CRLF BB”, “CCC” CRLF ZZZ,YYY,XXX
如果双引号用于封装领域,那么场内出现一个双引号必须由另一个双引号前面逃跑了。 例如:
“AAA级”, “B”, “BB”, “CCC”
然而,它看起来像导入时SSIS不喜欢这种方式。 可以做些什么让Excel中创建包含用作列分隔符,分隔符的文本或行分隔符数据中的任何特殊字符的CSV文件? 没有理由认为它不能使用维基百科中规定的方法工作,。 这是我想用来做旧的MS DTS包...
更新:
如果我用记事本修改输入文件
Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8
"1","ABC","AB""C","D,E","F","03","3,2","AB""C"
Excel读取它只是罚款
但SSIS回报
The preview sample contains embedded text qualifiers ("). The flat file parser does not support embedding text qualifiers in data. Parsing columns that contain data with text qualifiers will fail at run time.