2014-09-24 33 views
1

我有CSV格式以下數據文件 - https://www.dropbox.com/s/23dtr31pje15baz/yellow-dentist-chicago%2C%20il.csv?dl=0批量插入到SQL Server中的一個格式文件使用文本限定符

幾行有其用引號括起來的數據表明,中逗號數據是數據的一部分,而不是分隔符(請參閱第一個示例中第五行的「Bruce C. Gronner,DDS」)。因此,我的理解是,我需要使用此post中討論的格式文件。

作爲一個開始,我想出了這個

11.0 
13 
1 SQLCHAR 0 1000 "\","  1  Name   SQL_Latin1_General_CP1_CI_AS 
2 SQLCHAR 0 1000 "\","  2  Address   SQL_Latin1_General_CP1_CI_AS 
3 SQLCHAR 0 1000 "\","  3  State  SQL_Latin1_General_CP1_CI_AS 
4 SQLCHAR 0 1000 "\","  4  Phone  SQL_Latin1_General_CP1_CI_AS 
5 SQLCHAR 0 1000 "\","  5  Rating   SQL_Latin1_General_CP1_CI_AS 
6 SQLCHAR 0 1000 "\","  6  Reviews   SQL_Latin1_General_CP1_CI_AS 
7 SQLCHAR 0 1000 "\","  7  Website   SQL_Latin1_General_CP1_CI_AS 
8 SQLCHAR 0 1000 "\","  8  Email1   SQL_Latin1_General_CP1_CI_AS 
9 SQLCHAR 0 1000 "\","  9  MerchantVerified   SQL_Latin1_General_CP1_CI_AS 
10 SQLCHAR 0 1000 "\","  10  Lat   SQL_Latin1_General_CP1_CI_AS 
12 SQLCHAR 0 1000 "\","  11  Long   SQL_Latin1_General_CP1_CI_AS 
12 SQLCHAR 0 1000 "\","  12  ListingURL   SQL_Latin1_General_CP1_CI_AS 
13 SQLCHAR 0 1000 "\r\n"  13  Email2   SQL_Latin1_General_CP1_CI_AS 

然後我嘗試使用下面的SQL代碼導入

BULK INSERT RawData 
FROM 'C:\Users\William\Dropbox\yellow-dentist-chicago, il' 
WITH 
(
    FIRSTROW = 2, 
    FORMATFILE='C:\Users\William\Dropbox\formatfile.fmt' 
); 

我遇到的主要問題是,只有一個數據的小子集用引號括起來(只有當數據中有逗號時),所以我不知道如何在格式文件中適當地格式化定界符模式列。任何幫助,將不勝感激。

回答

2

您需要對格式文件進行細微更改。

要限制數據量,這裏是我的格式的數據:

Name, Address, Email Somename,"Address one",[email protected] Somename2,"Address2 Two",[email protected]

正如你可以看到地址欄使用雙引號的名稱和電子郵件沒有。

使用的格式是:

10.0 
3 
1 SQLCHAR 0 50 ",\""  1  Name   SQL_Latin1_General_CP1_CI_AS 
2 SQLCHAR 0 50 "\","  2  Address  SQL_Latin1_General_CP1_CI_AS 
3 SQLCHAR 0 50 "\r\n"  3  Email2  SQL_Latin1_General_CP1_CI_AS 

的名稱colume分隔符是,",並在格式文件將是",\""

的地址colume分隔符是",和格式文件將是'「\」,「

0

我可以想到這樣做的最快捷方式(我確定有其他方法),您可以在excel中格式化csv,並添加一個獨特的符號作爲字段終止符(在這種情況下使用豎線)和每個單元結束在這裏看到如何做此鏈接:

http://www.lenashore.com/2012/04/how-to-add-quotes-to-your-cells-in-excel-automatically/

您將要添加| @ |作爲單元格的自定義格式而不是引號。

現在你應該可以運行BULK INSERT這樣導入的數據:

BULK INSERT RequiredDB.DBO.RequiredTable 
FROM '%Drive%\%Folder%\yellow-dentist-chicago-il.csv' 
WITH 
    (
    FIELDTERMINATOR = '|', 
    ROWTERMINATOR = '\r\n' 
    ); 

而且我相信這是您在CSV發佈,而不是機密或私人數據的虛擬數據或公共信息。

相關問題