2016-07-11 72 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') 

希望這會有所幫助。