2013-08-20 48 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. 将暂存表中的数据插入到您的制作表中。
相关问题