2016-07-11 54 views
2

我有一个BULK INSERT任务,它从csv获取数据并导入到表中。唯一的问题是其中一列可以包含逗号,因此导入无法按预期工作。批量插入fmt文本限定符

我试图通过创建一个格式(FMT)文件来解决这个问题,其中的内容我已经详述如下: -

9.0 
6 
1  SQLCHAR  0  50  ","  1  "Identifier"         Latin1_General_CI_AS 
2  SQLCHAR  0  50  ","  2  "Name"            Latin1_General_CI_AS 
3  SQLCHAR  0  50  ","  3  "Date of Birth"           Latin1_General_CI_AS 
4  SQLCHAR  0  50  ","  4  "Admission"            Latin1_General_CI_AS 
5  SQLCHAR  0  50  ","  5  "Code"        Latin1_General_CI_AS 
6  SQLCHAR  0  50  "\r\n" 6  "Length"              Latin1_General_CI_AS 

列导致我的痛苦是第2列“名称”。

我已经尝试了一些事情,以确定列作为文本限定和包含逗号,但我没有得到我想要的结果。

如果我更改为以下: -

"\"," - 我得到的是这样的 - “理查德森,垫

这是不正确的,所以我想这个代替,一些其他的建议论坛/网站: -

"\",\"" 

这并不在所有的工作,实际上给我的错误

Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".Bulk load: An unexpected end of file was encountered in the data file. 

我试了一些其他的组合,只是不能得到这个权利。任何帮助或指导将大量赞赏。

回答

1

不是真的回答你有关格式文件的问题,但可能让你工作的解决方案。

从20世纪80年代开始,格式文件是无法理解的奥秘,批量插入是非常繁琐和无情的。因此我倾向于使用几行PowerShell清理数据。这是我最近使用的CSV转换为管分离的例子,以消除一些随机引用的输出,并允许逗号的记录:

Import-Csv -Path $dirtyCsv | 
ConvertTo-CSV -NoType -Delimiter '|' | 
%{ $_.Replace('"','') } | 
Out-File $cleanCsv 

你的想法...

这然后简单地进口:

BULK INSERT SomeTable FROM 'clean.csv' WITH (FIRSTROW = 2, FIELDTERMINATOR = '|', ROWTERMINATOR = '\n') 

希望这会有所帮助。