【问题标题】:How to convert a CSV file into bcp formatted file?如何将 CSV 文件转换为 bcp 格式的文件?
【发布时间】:2019-09-16 11:55:44
【问题描述】:

我正在执行将 CSV 文件导入 SQL Server 表的任务。我正在使用 bcp 工具,因为我的数据可能很大。我在使用 bcp 时面临的问题是,我要将 CSV 导入其中的表可以混合使用日期、int 等数据类型,如果我使用本机模式 (-n) 使用 bcp,我将需要 bcp 文件作为输入,但我有 CSV 文件。

有没有办法将 CSV 文件转换为 bcp 文件?或者 鉴于我的表列可以具有任何数据类型而不仅仅是字符类型,我如何将 CSV 文件导入 SQL Server 表?

如果所有列都是字符类型,我会使用带有 -c 选项的 bcp 工具。

【问题讨论】:

标签: sql-server bulkinsert bcp


【解决方案1】:

实际上...导入数据时最安全的做法是,尤其是像这样批量导入数据时,首先将其导入临时表。在这种情况下,所有字段都是字符串/varchars。然后,您可以清理/验证数据并确保其可以安全使用。然后,一旦您验证了它,将其移动/复制到您的生产表中,随时将其转换为正确的类型。这通常是我在处理导入数据时所做的。

【讨论】:

  • 绝对使用临时表,但我认为您从一开始就想要正确的数据类型。此外,这应该是一条评论。
  • 从一开始就拥有正确的数据类型是值得商榷的......我之前收到的文件包含格式错误的数据......日期格式不正确或日期无效(2 月 30 日? ) 或根本不完整,无法按原样带入系统。通过至少将它作为 varchar 接收,它让你有机会接收它,擦洗它,看看它是否可以转换为正确的类型,进行转换,然后继续。如果我将他 2 月 30 日作为数据值,我仍然想导入该值并将其标记为无效,也许让用户有机会以某种方式更正它。
【解决方案2】:

CSV 文件只是一个由逗号分隔的文本文件。关于导入文本文件,没有“BCP”文件之类的东西。 BCP 可以选择使用原生 SQL 数据(使用文本编辑器时人眼无法读取),但默认情况下只使用与 CSV 文件中相同的文本。无需转换,使用文本数据,没有“BCP 文件”之类的东西。它只是一个 ascii 文本文件。

创建文本文件的人已经完成了从其自然数据类型到文本的转换。正如其他人所建议的那样,如果您只是将您拥有的文本 CSV 数据文件加载到所有“VARCHAR”字段的“加载”表中,您稍后会省去一些痛苦。然后从该加载表中,您可以将数据操作为最终目标表中所需的任何数据类型。这样做比通过让 BCP 将数据直接插入最终目标表来让 SQL 进行隐含转换要好。

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 2016-03-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2018-01-17
    • 2018-08-15
    相关资源
    最近更新 更多