在字段定界符的通配符 - 读.csv文件

时间:2013-08-20 11:38:25

标签: sql csv

.csv文件会被外部公司每晚转储到我的FTP服务器上。 (因此我无法控制其格式,也不会改变它,因为它被其他几家公司使用。)

我的任务是创建一个运行的作业,从文件中提取信息(然后删除它),并将提取的数据插入到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。

2 个答案:

答案 0 :(得分:0)

我的方法是:

  1. 将csv文件批量加载到临时表中。接受数据的所有列都是varchar。
  2. 执行sql更新以删除括号及其内容。
  3. 进行其他任何处理。
  4. 将临时表中的数据插入到制作表中。

答案 1 :(得分: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