1

一个 .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。

4

2 回答 2

0

我的方法是:

  1. 将 csv 文件批量加载到临时表中。所有接受数据的列都是 varchar。
  2. 执行 sql 更新以删除括号及其内容。
  3. 做任何其他需要的处理。
  4. 将临时表中的数据插入到生产表中。
于 2013-08-20T12:11:14.723 回答
0

我已经设法通过使用我在这里找到的一个方便的功能来克服这个问题,该功能 来自位于此处的一篇文章。

此函数返回 .csv 文件中的每一行,然后我使用字符串操作来提取“[variable_name]”分隔符之间的字段并直接插入到我的 SQL 表中。

干净、简单、快捷。

注意:您必须在 SQL 服务器上启用 OLE 自动化:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
于 2013-08-20T12:50:35.350 回答