【问题标题】:Perfection in Using BULK INSERT Query完美使用 BULK INSERT 查询
【发布时间】:2013-03-29 06:16:15
【问题描述】:

我使用以下 MS SQL 查询将包含逗号分隔值的文本文件导入 DB:

BULK INSERT logs
FROM 'E:\Sample.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

不幸的是,我的 CSV 文本文件中的一个字段包含如下消息:“UDP 端口 (234,137) 中的问题”,其中包含逗号。因此,数据库将逗号之前的值作为一个字段,并将逗号之后的值插入到下一个字段中(这在逻辑上是不正确的)。结果,后一个字段的合法值在插入表时被丢弃。

希望我的问题得到最好的解释。

任何解决方案来克服这个问题并将整个:“UDP 端口(234,137)中的问题”存储到单个字段中?

【问题讨论】:

  • 如何获取 csv 文件?
  • 您的 csv 文件中的值是否一致引用?如果没有,那么您可能拥有this problem。 SQL Server 似乎期望文件中的所有值都被引用,或者没有。出于这个原因,我更喜欢使用具有良好 csv 支持的语言(Perl、Python 等)对文件进行预处理,然后生成一个“干净”的 csv 文件进行导入,或者直接生成一个INSERT 脚本。跨度>

标签: sql sql-server sql-server-2005


【解决方案1】:

我更喜欢通过 Microsoft 日志解析器 link 运行我的 CSV,并将其转换为制表符分隔。这样批量插入就可以完美地读取它。

这是一个关于使用日志解析器link 的非常好的链接。创建命令以读取 csv 并输出 tsv,然后使用 xp_cmdshell 调用它。

省去了为各种文件创建格式文件的麻烦。

【讨论】:

  • 嗨..谢谢!几个观察:1)尝试使用日志解析器。但是在 Datagrid 中查看时,我的所有字段都在一个列中。 2) 是否有任何选项可将输出 TSV 存储为文本文件格式? 3) 请注意,我的前端使用的是 C#。因此,我必须能够阅读 Logparser 输出给我的任何内容。任何解决方案:
【解决方案2】:

您是否尝试过放置其他字段终止符?

【讨论】:

  • 不!为什么要我试一试?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2014-09-16
相关资源
最近更新 更多