我正在尝试使用游标将数据从 CSV 文件插入到表中并打开行集批量插入。这在 99% 的情况下都适用于我,但如果 csv 文件中的某个字段包含逗号 (, ),则数据导入会被破坏,并且所有列都会在其位置后导入一列。例如,它应该如下所示:
timestamp username name IP title
20190331 ABCD12G david hertz 1.1.1.1 null
但是,如果我在名称列中有逗号(例如),它将如下所示:
timestamp username name IP title
20190331 ABCD12G david hertz 1.1.1.1
csv 示例:
username,name,ip,title
ABCD12G,david,hertz,1.1.1.1,''
这是我正在使用的语法:
insert into [player table]
select 20190331,* FROM OPENROWSET(BULK 'D:\folder\2019\03-
31\Player_statistics.csv', FIRSTROW = 2,
FORMATFILE='D:\folder\test\xml\Player_statistics.xml')
as t1
我该如何更改它以忽略单词中间的逗号?(我无法限制 CSV,因为它取自另一个不会限制字符的客户端。
我用于通过 openrowset 导入的 xml:
当您执行常规批量插入时,您可以选择指定分隔符 fielterminator = '","' ,我在 openrowset 中找不到类似的东西。
什么可以帮助解决这个问题?
如果所有行都包含逗号,则解决方案可以是
如果只有一些行包含逗号,并且没有一个
title
为空/空,则尝试如果 some
title
为空/空,我找不到简单的区分方法。更新
解决方案可以是:仅将 CSV 划分为两个字段 -
username
整个 slack,然后可以使用导入查询的 SELECT 部分中的常用字符串函数将 slack 划分为单独的字段(可能在链计算中使用中间变量)。您可以从以下链接中找到您的答案:
https://stackoverflow.com/questions/4123875/commas-within-csv-data
我们也曾经处理过 BCP 和 Transfer,但是在根据列的严重性或与客户达成一致后,将逗号替换为空格(如果可能)。
希望这可以帮助。