【发布时间】:2012-10-05 19:26:09
【问题描述】:
我正在尝试导入正确引用的 CSV 文件,这意味着数据仅在包含逗号时才会被引用,例如:
41, Terminator, Black
42, "Monsters, Inc.", Blue
我观察到第一行正确导入,但第二行错误,表明引用的逗号被视为字段分隔符。
我看过类似这样的建议
更改字段终止符
FIELDTERMINATOR='","'
但是,我的 CSV 文件只引用需要它的字段,所以我不相信这个建议会起作用。
SQL Server 的 BULK IMPORT 语句可以导入正确引用的 CSV 文件吗?怎么样?
【问题讨论】:
-
无法完成。 SQL Server 导入方法(BCP 和 BULK INSERT)不理解引用。
-
这是一个类似的帖子,有更多选项stackoverflow.com/questions/782353/…
-
引用不正确。根据 RFC4180,引号应该围绕所有字段或无字段。部分引用的 CSV 无效,无法使用 BULK IMPORT 加载。它们可以在 Excel、PowerShell 甚至 OPENROWSET 中打开,但不能直接批量导入。
-
@GeoffGriswald 我不同意你关于 RFC4180 规范的结论。第 2.5 节和第 2.6 节显示了混合使用引号和非引号的示例,ABNF 语法似乎表明任何给定的字段都可以被引用或不被引用。但是,在可能的情况下始终引用每个字段并使用 Dominix 的答案是可靠的建议。
-
Eric,像许多人一样,您误解了这些示例。 2.5 显示了 2 个示例,一个完全引用,一个未引用。 2.6 显示了 2 个示例,一个完全引用的跨两行(以证明一个字段包含 CRLF)和一个未引用的跨行。没有部分引用的 CSV 规范,RFC4180 也没有提供。这纯粹是通过 Excel 及其对 CSV 格式的历来糟糕的处理(这是故意进行的,以推广“.XLS”)产生的。 Excel 2019 终于提供了正确处理 CSV 文件的选项,但损坏已经造成。
标签: sql-server csv bulkinsert