2013-08-20 45 views
1

.csv文件被外部公司夜間拋到我的FTP服務器上。 (因此我無法控制它的格式,也不會改變它,因爲它被其他幾家公司使用。)字段分隔符中的通配符 - 讀取.csv文件

我的任務是創建一個工作,從文件中提取信息(然後刪除它)並將提取的數據插入到SQL表中。

這是信息的包含.csv文件中的格式爲:

[Message]Message 1 contains, a comma,[Cell]27747642512,[Time]3:06:10 PM,[Ref]144721721 
[Message]Message 2 contains,, 2 commas,[Cell]27747642572,[Time]3:06:10 PM,[Ref]144721722 
[Message],[Cell]27747642572,[Time]3:06:10 PM,[Ref]144721723 

我有一個SQL Server 2012的表具有以下的列:

Message varchar(800) 
Cell varchar(15) 
Time varchar(10) 
Ref varchar(50) 

我想用的東西像SQL批量插入(見下文)從.csv文件中讀取並插入到上面的SQL表中。

BULK INSERT sms_reply 
    FROM 'C:\feedback.csv' 
    WITH 
    (
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',', --CSV field delimiter 
    ROWTERMINATOR = '\n', --Use to shift the control to next row 
    TABLOCK 
    ) 

.csv文件中的分隔符不常見。我想知道是否有一種方法可以讓我在指定分隔符時使用通配符。例如'[%]'?

然後,這將忽略方括號之間的任何內容並提取兩者之間的信息。

我不能簡單地使用逗號來分隔字段,因爲在上面的.csv示例中可能會出現字段中的逗號。

或者如果任何人有任何其他建議,我會很感激。

TIA。

+0

我不知道理解你所說的「不普通」的意思。分隔符是否總是'%'?或者它可能會改變?要麼 ? –

+0

「不常見」,我的意思是它並不總是像「,」這樣的特定字符。查看頂部的.csv文件,您會注意到我需要的字段實際上由[Message],[Cell],[Time]和[Ref]分隔。即方括號內的字是分隔符。 –

+0

我仍然看到逗號分隔每個字段。事實上,如果他們不在那裏,它不會是一個.csv文件。 –

回答

0

我已經設法通過使用一個方便的功能來克服這個,我發現here 它來自位於here的文章。

該函數返回.csv文件中的每一行,然後使用字符串操作來提取「[variable_name]」分隔符之間的字段並直接插入到我的SQL表中。

乾淨,簡單,快捷。

注意:您要您的SQL服務器上啓用OLE自動化:

sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1; 
GO 
RECONFIGURE; 
GO 
0

我的做法是:

  1. 批量csv文件加載到一個臨時表。所有接受數據的列都是varchar。
  2. 做一個SQL更新來擺脫括號及其內容。
  3. 做任何需要的其他處理。
  4. 將暫存表中的數據插入到您的製作表中。
相關問題